牛牛晾衣服
题目描述:
牛牛有n件带水的衣服,干燥衣服有两种方式。
一、是用烘干机,可以每分钟烤干衣服的k滴水。
二、是自然烘干,每分钟衣服会自然烘干1滴水。
烘干机比较小,每次只能放进一件衣服。
注意,使用烘干机的时候,其他衣服仍然可以保持自然烘干状态,现在牛牛想知道最少要多少时间可以把衣服全烘干。
思路:首先,题目中说自然烘干一分钟一滴水,烘干机一分钟 k 滴水,但是这 k 滴水里有一滴是自然烘干的,,,好吧,自然干和自然烘干是两码事,这么想就合理了?
看到题目很容易会想到贪心,,但是想不到怎么贪,,
所以正解是二分答案。
class Solution {
public:
/**
* 计算最少要多少时间可以把所有的衣服全烘干
* @param n int整型 n件衣服
* @param a int整型vector n件衣服所含水量数组
* @param k int整型 烘干机1分钟可以烘干的水量
* @return int整型
*/
bool fun(int mid,vector<int> a,int k)
{
int num=0;
for(auto x:a){
if(x <= mid) continue;
x -= mid;
num += ceil((double)x/(k-1));
}
if(num > mid) return 0;
return 1;
}
int solve(int n, vector<int>& a, int k) {
// write code here
int l=1,r = a[0];
for(auto x:a) r = max(r,x);
while(l<=r){
int mid = (l+r )>> 1;
if(fun(mid,a,k)) r = mid - 1;
else l = mid + 1;
}
return r+1;
}
};