优先队列

位数求和

https://ac.nowcoder.com/acm/contest/6220/A

优先队列,大根堆,每次取最大的数烘干若干分钟后小于第二大的水滴数,当最大数小于当前时间结束循环

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;
    }
};
全部评论

相关推荐

西松屋:说明原部门有机会把
点赞 评论 收藏
分享
02-10 21:39
Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务