二分法:判断给定时间是否满足烘干需求
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 计算最少要多少时间可以把所有的衣服全烘干
* @param n int整型 n件衣服
* @param a int整型vector n件衣服所含水量数组
* @param k int整型 烘***1分钟可以烘干的水量
* @return int整型
*/
int dryClothes(int n, vector<int>& a, int k){
int max=0;
for(int i=0;i<n;i++){//统计最大的含水量作为上界
if(a[i]>max)max=a[i];
}
int left=1;
int right=max;
while(left<=right){
int middle=left+(right-left)/2;
int time=0;//需要烘***的时间
for(int i=0;i<n;i++){
if(a[i]<=middle)continue;//无需烘干
else{
time+=ceil((a[i]-middle)*1.0/(k-1));//需要烘干的时间
}
}
if(time>middle)left=middle+1;//比较烘干时间是否超时
else right=middle-1;
}
return left;
}
};