主页有其他数据结构内容(持续更新中)
难度:Medium
代码:
class Solution {
private:
// 如果按照当前速度能吃完所有香蕉,return true
bool check(vector<int>& piles, int h, int k) {
long long count = 0;
for(auto c : piles) {
if(c <= k) {
count++;
}
else {
// 向上取整
count += (c - 1) / k + 1;
}
}
if(count <= h) {
return true;
}
return false;
}
public:
int minEatingSpeed(vector<int>& piles, int h) {
int lower = 1;
int upper = piles[max_element(piles.begin(), piles.end()) - piles.begin()];
int left = lower - 1;
int right = upper + 1;
while(left + 1 < right) {
int mid = left + (right - left) / 2;
if(check(piles, h, mid)) {
right = mid;
}
else {
left = mid;
}
}
return right;
}
};