前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode-2335. 装满杯子需要的最短总时长

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

原创
作者头像
肥晨
发布2023-04-04 14:51:18
2080
发布2023-04-04 14:51:18
举报
文章被收录于专栏:农民工前端

先上题目:

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

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

示例 1:

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

示例 2:

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

输入:amount = [5,0,0]
输出:5
解释:每秒装满一杯冷水。提示:
代码语言:javascript
复制
amount.length == 3
0 <= amounti <= 100
代码语言:txt
复制
## 解决思路:
设 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杯水的时间
代码语言:javascript
复制
### 代码
```html
/**
@param {number[]} amount
@return {number}
 */
var fillCups = function(amount) {
function methodSort(a,b){
    return a-b;
}
amount=amount.sort(methodSort)
if(amount0+amount1<amount2){
    return amount2
}else{
    return Math.ceil((amount0+amount1-amount2)/2)+amount2
}
};

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 先上题目:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档