优先队列,大根堆,每次取最大的数烘干若干分钟后小于第二大的水滴数,当最大数小于当前时间结束循环
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> q;
if(n==1) return a[0]/k+(int)(a[0]%k!=0);
k--;
for(auto x:a) q.push(x);
int ans=0;
while(q.top()>ans){
int curr=q.top();
q.pop();
int sec=q.top();
int t=(curr-sec)/k+((int)(curr-sec)%k!=0);
t=max(t,1);
curr-=t*k;
q.push(curr);
ans+=t;
}
return ans;
}
};


京公网安备 11010502036488号