文章目录
- 1. 题目
- 2. 解题
1. 题目
现有一台饮水机,可以制备冷水、温水和热水。每秒钟,可以装满 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 排序后 假设 x <= y <= z
- 如果 z >= x+y , 显然只需要 z 次就完成了
- 否则的话 z < x+y ,我先消化掉 z, 且尽可能的让 x 和 y 的数量相等,由于 z 最大,经过 z 次以后,剩余的 x 和 y 可以相等,或者相差 1,总的次数为
ceil ((x+y-z)/2) + z
, 即ceil((x+y+z)/2))
import math
class Solution:def fillCups(self, amount: List[int]) -> int:return max(max(amount), math.ceil(sum(amount)/2))
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!