1. 题目来源
相关题目:
2. 题目解析
显然二分答案 k
,假设最小速度即为 k
,那么当二分的值小于 k
的时候就不合法,即速度过小,需要时间就太长,同理大于 k
则合法。
合法性判断需要注意上取整即可。
- 时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
- 空间复杂度: O ( 1 ) O(1) O(1)
class Solution {
public:
bool check(vector<int> &p, int h, int x) {
int t = 0;
for (int i = 0; i < p.size(); i ++ )
t += (p[i] + x - 1) / x;
return t <= h;
}
int minEatingSpeed(vector<int>& piles, int h) {
int n = piles.size();
int l = 1, r = 1e9;
while (l < r) {
int mid = l + r >> 1;
if (check(piles, h, mid)) r = mid;
else l = mid + 1;
}
return l;
}
};