美文网首页算法
LCP 33. 蓄水

LCP 33. 蓄水

作者: 红树_ | 来源:发表于2023-05-20 19:33 被阅读0次

愿所有为梦想而努力的人,都能吃到那颗糖。

LC每日一题,参考LCP 33. 蓄水 - 力扣(Leetcode),这个简单题有点难。

题目

给定 N 个无限容量且初始均空的水缸,每个水缸配有一个水桶用来打水,第 i 个水缸配备的水桶容量记作 bucket[i]。小扣有以下两种操作:

  • 升级水桶:选择任意一个水桶,使其容量增加为 bucket[i]+1

  • 蓄水:将全部水桶接满水,倒入各自对应的水缸

每个水缸对应最低蓄水量记作 vat[i],返回小扣至少需要多少次操作可以完成所有水缸蓄水要求。

注意:实际蓄水量 达到或超过 最低蓄水量,即完成蓄水要求。

输入:bucket = [1,3], vat = [6,8]
输出:4

解题思路

  • 贪心+优先队列:计算最大的蓄水次数项,每次增加其容量,可以用优先队列维护更新后的最大蓄水次数项,循环退出条件为:增加容量次数不超过最大蓄水次数,最少蓄水一次。

贪心+优先队列

class Solution {
    public int storeWater(int[] bucket, int[] vat) {
        int ans = 0,n = bucket.length;
        //考虑优先队列 存储需要蓄水的最大次数项
        PriorityQueue<int[]> pq = new PriorityQueue<>(
            (a,b)->a[0]==b[0]?bucket[a[1]]-bucket[b[1]]:b[0]-a[0]);
        for(int i = 0; i < n; i++) {
            if(vat[i] == 0) continue;
            if(bucket[i] == 0){ //如果vat>0 bucket=0则必须增加bucket容量
                ans+=1;
                bucket[i] = 1;
            }
            //统计蓄水次数
            int count = vat[i]/bucket[i] + (vat[i]%bucket[i] == 0?0:1);
            pq.add(new int[]{count,i});
        }
        if(pq.size() == 0) return ans;
        int min = pq.peek()[0],add = 0;//最大蓄水次数.
        while(++add < min) {
            //取出最多次数的项增加容量后 重新计算最大值
            int[] top = pq.poll();
            if(top[0] == 1) break;//至少操作一次蓄水
            int i = top[1];
            bucket[i] += 1;
            int count = vat[i]/bucket[i] + (vat[i]%bucket[i] == 0?0:1);
            pq.add(new int[]{count,i});
            int cur = add + pq.peek()[0];
            if(cur < min) min = cur;
        }
        return ans + min;
    }
}

复杂度分析

  • 时间复杂度: O(nlogn+klogn),nbucket长度,k为初始最大蓄水次数.
  • 空间复杂度: O(n),优先队列空间不超过n.

相关文章

  • 老毛子华硕固件 lcp设置 设置错了导致网络卡

    不主动发送 lcp-echo(off) 是自动lcp响应间隔 否

  • 前端优化-LCP

    什么是LCP LCP是最大内容绘制的简称。LCP是用来测量感知加载速度。感知加载速度是以用户为中心的重要指标。因为...

  • lintcode 最长公共前缀

    给k个字符串,求出他们的最长公共前缀(LCP)样例在 "ABCD" "ABEF" 和 "ACEF" 中, LCP...

  • 2016 Claire Check out list

    2016.3-2016.9 「今天2017LCP大选」 我也不知道自己哪里来的勇气,去竞选这个LCP,毕竟自己才待...

  • 2018-11-10

    联结 赋能 共舞 文/美妙人生 LCP7东莞站晚宴汇美发言稿 LCP7的各位学员、教练: 大家晚上好! 首先,...

  • 蓄水

    今天看到一句话,家庭不只是你可以宣泄情绪的地方,它也需要蓄水,才可以承载情绪的宣泄。 其实任何一段关系都需要经营,...

  • 连接器lcp生产中的阻塞清洗

    LCP即液晶高分子聚合物,由刚性分子链构成,在熔融状态能自纤维增强,是一种新型的特种高分子材料,lcp强度很高,甚...

  • (二分图匹配,匈牙利算法)LCP 04. 覆盖

    LCP 04. 覆盖[https://leetcode-cn.com/problems/broken-board-...

  • LCP 05. 发 LeetCoin

    LCP 05. 发 LeetCoin[https://leetcode-cn.com/problems/coin-...

  • Leetcode-LCP 06 拿硬币

    LCP 06. 拿硬币[https://leetcode-cn.com/problems/na-ying-bi/]...

网友评论

    本文标题:LCP 33. 蓄水

    本文链接:https://www.haomeiwen.com/subject/sxvosdtx.html