leetcode-2335. 装满杯子需要的最短总时长
先上题目:
现有一台饮水机,可以制备冷水、温水和热水。每秒钟,可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。
给你一个下标从 0 开始、长度为 3 的整数数组 amount ,其中 amount[0]、amount[1] 和 amount[2] 分别表示需要装满冷水、温水和热水的杯子数量。返回装满所有杯子所需的 最少 秒数。
示例 1:
复制代码
示例 2:
复制代码
提示:
复制代码
解决思路:
设 abc 按序列排如果 c>a+b 返回 c 如果 c<a+b 返回(a+b-c)/2+c 如果是小数 要进一
为什么 c>a+b 返回 c ?
c 是最大数量水杯,并且大于 a+b,那么最佳策略当然是 A 和 B 分别和 C 一起灌水,最后 C 剩余的部分再单独装。这种情况的答案就是 C。
为什么 c<a+b 返回(a+b-c)/2+c 如果是小数 要进一
如果相差的并没有这么大,要尽量保证 A 和 B 剩余的容积尽可能相同,这样的话,我们就可以在装满 C 之后,同时装 A 和 B 把 C 装满时装入 A 和 B 的水也是 C,A 和 B 剩余要装的水量是 A+B-C,尽量平均地分配在 A 和 B 两个杯子中,所以剩余的时间就是(A+B-C)/2 然后再加上原本 c 杯水的时间
代码
复制代码
版权声明: 本文为 InfoQ 作者【肥晨】的原创文章。
原文链接:【http://xie.infoq.cn/article/c3f2514e71a6937647b2db5f4】。文章转载请联系作者。
评论