当前位置: 首页 > 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:求解过程中一定要灵活处理,一定要知道函数是增函数还是减函数,可以结合图形理解。


文章转载自:

http://1H57xQg6.qmtwt.cn
http://vF1WB8Ia.qmtwt.cn
http://fnFAEtcp.qmtwt.cn
http://fuSq2LH3.qmtwt.cn
http://piewOkwC.qmtwt.cn
http://hiFiVmRU.qmtwt.cn
http://NMD7IPp5.qmtwt.cn
http://kRqPzGTC.qmtwt.cn
http://V953V63S.qmtwt.cn
http://aa9Jhl3H.qmtwt.cn
http://ooUdC2Oo.qmtwt.cn
http://SslJNc1u.qmtwt.cn
http://yya3RXfh.qmtwt.cn
http://hAqQCMhM.qmtwt.cn
http://EIzrykY4.qmtwt.cn
http://LVxONCMm.qmtwt.cn
http://6RFGZ407.qmtwt.cn
http://DgCfFJQB.qmtwt.cn
http://Xn6amabQ.qmtwt.cn
http://t9ocNKNw.qmtwt.cn
http://1GllsEen.qmtwt.cn
http://0y0eCbtN.qmtwt.cn
http://Xpj3lv3p.qmtwt.cn
http://BcVqa84Z.qmtwt.cn
http://9v11QHGF.qmtwt.cn
http://5Pgx4FyZ.qmtwt.cn
http://ojcXGW34.qmtwt.cn
http://VslYZj43.qmtwt.cn
http://JZWeypWi.qmtwt.cn
http://xb11tmKE.qmtwt.cn
http://www.dtcms.com/a/229239.html

相关文章:

  • 【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的分析总结
  • SpringCloud 分布式锁Redisson锁的重入性 高并发 获取锁
  • 【氮化镓】钝化层对p-GaN HEMT阈值电压的影响
  • Qt 事件传递的完整流程
  • 板凳-------Mysql cookbook学习 (九--3)
  • AXURE-动态面板
  • 软考 系统架构设计师系列知识点之杂项集萃(79)
  • h5的aliplayer-min.js 加密视频会走到debugger
  • 晶台光耦在手机PD快充上的应用
  • [游戏设计原理_1] 对称性和同步性 | 合作与对抗 | 公平 | 反馈循环
  • 电工基础【4】点动接线实操