C 牛牛晾衣服
牛牛有n件带水的衣服,干燥衣服有两种方式。
一、是用烘干机,可以每分钟烤干衣服的k滴水。
二、是自然烘干,每分钟衣服会自然烘干1滴水。
烘干机比较小,每次只能放进一件衣服。
注意,使用烘干机的时候,其他衣服仍然可以保持自然烘干状态,现在牛牛想知道最少要多少时间可以把衣服全烘干。
思路: 考虑从大往小取出衣服 进行烘干 其实存在一个问题 就是当前秒最优决策并不能代表下一秒的最优决策
所以每件衣服 只能烘干一秒 然后放回待选区 所以使用对应的优先队列 附上代码
class Solution {
public:
/**
* 计算最少要多少时间可以把所有的衣服全烘干
* @param n int整型 n件衣服
* @param a int整型vector n件衣服所含水量数组
* @param k int整型 烘干机1分钟可以烘干的水量
* @return int整型
*/
int solve(int n, vector<int>& a, int k) {
priority_queue<int>que;
while(!que.empty()) que.pop();
for(int i = 0; i < n; i ++){
que.push(a[i]);
}
if(k == 1){
return que.top();
}
int time = 0, value = 0;
while(que.top() > value){
int t = que.top();
t = t - k + 1;
/*
你可能会疑惑为什么要 - k + 1
答案就是对应的 如果考虑一个 8 k=4
那么对应的话 剩余一个4 就不进入循环 所以得 + 1
因为加1了 所以k == 1的情况就需要特判
*/
que.pop();
time += 1;
value += 1;
que.push(t);
}
return time;
// write code here
}
};