当前位置: 首页 > news >正文

【LeetCode - 每日一题】2240. 买钢笔和铅笔的方案数(23.09.1)

2240. 买钢笔和铅笔的方案数

题意

  • 两种价格的笔
  • 返回所有可以买的方案数
  • 可以为 0

解法

注意这道题的复杂度比较高,O(N2) 是过不了的。一开始是这样写的:

// tle 代码
class Solution {
public:long long waysToBuyPensPencils(int total, int cost1, int cost2) {int max1 = total / cost1;int max2 = total / cost2;long long ans = 0;for(int i = 0; i <= max1; i++){for(int j = 0; j <= max2; j++){if(i * cost1 + j * cost2 <= total)ans++;}}return ans;}
};

但是在极端情况,比如 cost1 = cost2 = 1 的时候,两重 for 循环的复杂度会达到O(N2),因此直接在每次拿取若干支钢笔时计算可以拿的铅笔的方案数(注意可以拿 0 只 铅笔)。

class Solution {
public:long long waysToBuyPensPencils(int total, int cost1, int cost2) {int max1 = total / cost1;int max2 = total / cost2;long long ans = 0;for(int i = 0; i <= max1; i++){int retain = total - i * cost1;ans += (retain / cost2 + 1);}return ans;}};

复杂度

时间复杂度:O( ⌈ t o t a l c o s t 1 ⌉ \lceil \frac{total}{cost1}\rceil cost1total),可以优化为 O( m a x ( ⌈ t o t a l c o s t 1 ⌉ , ⌈ t o t a l c o s t 2 ⌉ ) max(\lceil \frac{total}{cost1}\rceil, \lceil \frac{total}{cost2}\rceil) max(⌈cost1total,cost2total⌉))。
空间复杂度:O(1)。


http://www.lryc.cn/news/149741.html

相关文章:

  • SQL Server如何新建作业
  • 【计算机网络】CDN 内容分发
  • Yjs + Quill 实现文档多人协同编辑器开发(基础+实战)
  • 个性化定制界面还是极简版原装界面?我的选择是……
  • C++ STL list容器使用教程
  • go web之一:hello world快速上手+handle(http.Handle和http.HandleFunc的区别与联系)
  • 【Postman】postman生成测试报告完整步骤(包含命令与newman安装教程链接)
  • 一、C#—概述环境安装(1)
  • C# 实现ComboBox下拉框控件
  • leetcode做题笔记119. 杨辉三角 II
  • Dolphin for Mac(Wii游戏模拟器)配置指南
  • Java,Linux,Mysql小白入门
  • 代码随想录算法训练营第二十四天|理论基础 77. 组合
  • macos安装zsh
  • 【Unity】预制体材质变(Clone)克隆体问题
  • python“魂牵”京东商品历史价格数据接口(含代码示例)
  • 密码算法、密钥体系---安全行业基础篇1
  • Java工具类记录
  • DVWA靶场搭建
  • Uniapp笔记(二)uniapp语法1
  • 【1day】PHPOK cms SQL注入学习
  • 线程同步与互斥
  • 电子词典dictionary
  • 【python爬虫】10.指挥浏览器自动工作(selenium)
  • QT文件对话框,将标签内容保存至指定文件
  • C#,《小白学程序》第十一课:阶乘(Factorial)的计算方法与代码
  • MySQL 数据库常用命令大全(完整版)
  • 【数学】【书籍阅读笔记】【概率论】应用随机过程概率论模型导论 by Sheldon M.Ross 第一章 概率论引总结与习题题解 【更新中】
  • posexplode函数实战总结
  • QTday3(对话框、发布软件、事件处理核心机制)