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

数组-差分数组抽象版

超级能吃的珂珂

875. 爱吃香蕉的珂珂 - 力扣(LeetCode)

这玩意是二分查找?不一定再看看,分析一下题目n堆香蕉,速度是变量,速度越快所需时间越少。里面是有一种单调关系。我们要求h小时中吃完,所以可以把这个问题抽象成一个函数,x是吃的速度,y是时间边界条件是h。我们要求的就是边界条件内(y<=h),全吃完的自变量大小(x)。

class Solution {
public:int minEatingSpeed(vector<int>& piles, int h) {int n = piles.size();int left = 1, right = 1000000000 + 1;while(left < right) {int mid = left + (right - left)/2;if(f(piles, mid) == h) {right = mid;} else if(f(piles, mid) > h) {left = mid +1;} else {right = mid;}}return right;}int f(vector<int>& piles, int x) {int hours = 0;for(int& pile : piles) {hours += pile / x;if(pile % x > 0) {hours++;}}return hours;} // 创建一个函数
};

关键点:

1:函数的意义,首先是我们发现了一种单调的关系并且找到了一个边界条件,所以我们考虑可能使用二分,之后求什么什么就是自变量,边界是什么,什么就是函数。通过这个我们可以写出f。

2:我们的二分是基于自变量的,比的时候是基于函数的。自变量的取值范围,也就是吃香蕉的速度,根据题意应该是一到最大的一堆香蕉的数量,所以可以遍历数组找到最大值,也可以直接以题目给的范围作为范围。

3:求解过程中一定要灵活处理,一定要知道函数是增函数还是减函数,可以结合图形理解。主要是两条,我们需要的左边界还是右边界,我们是单调增还是单调减。

1011. 在 D 天内送达包裹的能力 - 力扣(LeetCode)

class Solution {
public:int shipWithinDays(vector<int>& weights, int days) {int left = 0, right = 1;for(const int weight : weights) {left = max(left, weight);right += weight;}while(left < right) {int mid = left + (right - left)/2;if(f(weights, mid) > days) {left = mid+1;} else if(f(weights, mid) == days) {right = mid;} else {right = mid;}}return left;}int f(vector<int>& weights, int x) {int days = 0;int carry = x;for(int& weight : weights) {if(carry < weight) {carry = x;days++;}carry -= weight;}if(carry < x) {days++;}return days;}
};

和上道题基本一样,我们完全按照之前的分析:

关键点:

1:函数的意义,首先是我们发现了一种单调的关系并且找到了一个边界条件,所以我们考虑可能使用二分,之后求什么什么就是自变量,边界是什么,什么就是函数。通过这个我们可以写出f。

总之要求什么什么就是自变量,什么是边界什么就是函数。

2:我们的二分是基于自变量的,比的时候是基于函数的。自变量的取值范围,也就是船的载重,根据题意应该是最大的货物重量到所有货物总重量,所以可以遍历数组找到最大值和sum。

3:求解过程中一定要灵活处理,一定要知道函数是增函数还是减函数,可以结合图形理解。

相关文章:

  • 【Redis】笔记|第7节|大厂生产级Redis高并发分布式锁实战(二)
  • 风机巡检方案艰难之路
  • 基于TI DSP控制的光伏逆变器最大功率跟踪mppt
  • 【Zephyr 系列 5】定时器与低功耗控制:打造省电高效的嵌入式系统
  • Windows 下部署 SUNA 项目:虚拟环境尝试与最终方案
  • 数据生命线 - MySQL 备份与恢复策略详解
  • ADI硬件笔试面试题型解析上
  • VueScan:全能扫描,高清输出
  • STM32学习之WWDG(原理+实操)
  • 适合自己的记单词方式
  • 中英混合编码解码全解析
  • C++实现汉诺塔游戏用户交互
  • 【笔记】用命令手动下载并安装 tokenizers 库.whl文件(Python 3.12+)
  • 动态规划(2)
  • 7. Ext系列文件系统
  • 深度学习介绍
  • 如何选择最高效的沟通方式?
  • 光耦电路学习,光耦输入并联电阻、并联电容,光耦输出滤波电路
  • 国产高云FPGA实现视频采集转UDP以太网输出,FPGA网络摄像头方案,提供2套Gowin工程源码和技术支持
  • 2023年12月四级真题Reading Comprehension的分析总结
  • 聊城网站建设动态/郴州seo快速排名
  • 婚纱类网站素材/湖南网站设计外包费用
  • dw cs6asp.net网站建设/友情链接翻译
  • 网站做优化有什么好处/深圳seo外包
  • 织梦 帝国 学校网站/seo关键词有话要多少钱
  • 桂林建设银行招聘网站/自学seo能找到工作吗