【LeetCode】装满杯子需要的最短总时长 Java 题解
题目描述
现有一台饮水机,可以制备冷水、温水和热水。每秒钟,可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。
给你一个下标从 0 开始、长度为 3 的整数数组 amount ,其中 amount[0]、amount[1] 和 amount[2]。 分别表示需要装满冷水、温水和热水的杯子数量。返回装满所有杯子所需的 最少 秒数。
复制代码
思路分析
今天的算法题目是数组题目,题目描述每秒钟,可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。题目思路比较清晰,我们优装满 2 杯 不同 类型水,1 杯任意类型的水。
我们先将数组排序,设数量为 x,y,z。如果若 x + y ≤ z,显然每次用一个 z 和一个 x 或 y 匹配是最优的,消耗 2 杯水最优。答案就是 z。
若 x + y > z, 假设超出部分是 t = x + y - z, 我们以消耗 2 杯水为优先,当 x + y = z 时候,答案是 t / 2 + z。实现代码如下,供参考。
通过代码
复制代码
总结
上述算法的题目时间复杂度是 O(1), 空间复杂度是 O(1)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【Albert】的原创文章。
原文链接:【http://xie.infoq.cn/article/2c8547b75e66b79d8994c0fd9】。文章转载请联系作者。
评论