这题看起来十分眼熟啊,像极了 1760. 袋子里最少数目的球
还是一样的解法,速度可以从1到1e9,是具有单调性的,当一个速度可以吃完时,比它快的肯定也能吃完,所以可以用二分查找能够吃完的最小速度,最后返回这个最小速度就行。
class Solution {
public:
int minEatingSpeed(vector<int>& piles, int h) {
int p=1,q=1000000000;
int ans=1000000000;
while(p<=q){
int c=0;
int mid=p+(q-p)/2;
for(int s:piles){
if(s<=mid){
c++;
}
else{
c+=s/mid;
if(s%mid){
c++;
}
}
}
if(c>h){
p=mid+1;
}
else{
ans=mid;
q=mid-1;
}
}
return ans;
}
};
和之前的一样,思路都一样的就不写了,这种对答案进行二分查找类型的题好像可以归为二分答案。
class Solution {
public:
int maxDistance(vector<int>& position, int m) {
int p=1,q=1000000000;
int ans=1,len=position.size();
sort(position.begin(),position.end());
while(p<=q){
int c=1;
int mid=p+(q-p)/2;
int x=0;
for(int i=1;i<len;i++){
if(position[i]-position[x]>=mid){
c++;
x=i;
}
}
if(c>=m){
ans=mid;
p=mid+1;
}
else{
q=mid-1;
}
}
return ans;
}
};