[二分法]leetcode875:爱吃香蕉的珂珂(medium)
程序员文章站
2024-03-16 09:05:40
...
题目:
题解:
- 二分法
- 与1283. 使结果不超过阈值的最小除数算法思路一模一样,大家直接看代码就好了。
代码如下:
class Solution {
public:
//题解:二分查找
//二分查找结束的条件为区间内还剩下两个数,其中右边那个数为我们所要寻找的数
int minEatingSpeed(vector<int>& piles, int H) {
int left=0,right=1000000001;
while(left+1<right)
{
int mid=left+((right-left)>>1);
long long sum=0;
for(int p:piles){//解释:若num小于等于mid,num-1/mid为0,然后向上取整再加1;若num大于mid,num-1/mid为整除结果,然后向上取整再加1
sum+=(p+mid-1)/mid;//向上取整
}
if(sum>H)left=mid;//sum值太大,区间右移
else right=mid;//sum值小,区间左移,注意最终结果就出现在右边界上
}
return right;
}
};