当前位置:   article > 正文

​力扣解法汇总2335. 装满杯子需要的最短总时长_力扣水杯

力扣水杯

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

现有一台饮水机,可以制备冷水、温水和热水。每秒钟,可以装满 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

解题思路:

* 解题思路:
* 找到三个数中最大的那个,然后和另外两个的和对比。
* 如果max*2<=sum,则说明小于另外两个的和,则sum/2,余数进位。
* 反之,返回max即可。
 

代码:

  1. public class Solution2335 {
  2. public int fillCups(int[] amount) {
  3. int max = amount[0];
  4. int sum = max;
  5. for (int i = 1; i < amount.length; i++) {
  6. sum += amount[i];
  7. max = Math.max(max, amount[i]);
  8. }
  9. if (max * 2 <= sum) {
  10. return (int) Math.ceil((double) sum / 2);
  11. }
  12. return max;
  13. }
  14. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/812862
推荐阅读
相关标签
  

闽ICP备14008679号