先确定K的范围,然后遍历K从1到maxK,运行超时
class Solution {
public:
int minEatingSpeed(vector<int>& piles, int h) {
int maxK = -1;
int minK = -1;
// 1.获取最大K——最大香蕉数
for (auto& pile : piles)
if (pile > maxK) maxK = pile;
// 2.在[1,maxK]中二分搜索查找最小k
int left = 1;
int right = maxK;
while(left <= right) {
int mid = left + (right - left) / 2;
int sum = 0;
for (int i = 0; i < piles.size(); i++) {
// 3.向上取整累加
sum += ceil(piles[i] * 1.0 / mid);
if (sum > h) { // minK在右侧
left = mid + 1;
break;
}
if (i == piles.size() - 1) { // minK在当前或左侧
minK = mid;
right = mid - 1;
}
}
}
return minK;
}
};
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有