首页 > 其他分享 >力扣---2335. 装满杯子需要的最短总时长

力扣---2335. 装满杯子需要的最短总时长

时间:2023-02-11 18:12:00浏览次数:37  
标签:2335 总时长 装满 一杯 温水 --- 热水 amount 冷水

现有一台饮水机,可以制备冷水、温水和热水。每秒钟,可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。

给你一个下标从 0 开始、长度为 3 的整数数组 amount ,其中 amount[0]、amount[1] 和 amount[2] 分别表示需要装满冷水、温水和热水的杯子数量。返回装满所有杯子所需的 最少 秒数。

 

示例 1:

输入:amount = [1,4,2]
输出:4
解释:下面给出一种方案:
第 1 秒:装满一杯冷水和一杯温水。
第 2 秒:装满一杯温水和一杯热水。
第 3 秒:装满一杯温水和一杯热水。
第 4 秒:装满一杯温水。
可以证明最少需要 4 秒才能装满所有杯子。

示例 2:

输入:amount = [5,4,4]
输出:7
解释:下面给出一种方案:
第 1 秒:装满一杯冷水和一杯热水。
第 2 秒:装满一杯冷水和一杯温水。
第 3 秒:装满一杯冷水和一杯温水。
第 4 秒:装满一杯温水和一杯热水。
第 5 秒:装满一杯冷水和一杯热水。
第 6 秒:装满一杯冷水和一杯温水。
第 7 秒:装满一杯热水。

示例 3:

输入:amount = [5,0,0]
输出:5
解释:每秒装满一杯冷水。

 

提示:

    amount.length == 3
    0 <= amount[i] <= 100

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-amount-of-time-to-fill-cups
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

观察题目和用例,可以很容易想到,每次装最多的两个杯子,直到所有的杯子都是0;

可以利用排序来完成这点。

class Solution {
    public int fillCups(int[] amount) {
        int res = 0;
        while (amount[0] > 0 || amount[1] > 0 || amount[2] > 0) {
            res ++;
            Arrays.sort(amount);
            amount[2] --;
            amount[1] --;
        }
        return res;
    }
}

 

看下官解,数学方法,果然6,虽然运行后好像比我的更多了。。。

应该是数据量太小,数据范围也太小的原因。

class Solution {
    public int fillCups(int[] amount) {
        Arrays.sort(amount);
        if (amount[2] > amount[1] + amount[0]) {
            return amount[2];
        }
        return (amount[0] + amount[1] + amount[2] + 1) / 2;
    }
}

 

标签:2335,总时长,装满,一杯,温水,---,热水,amount,冷水
From: https://www.cnblogs.com/allWu/p/17112268.html

相关文章