当前位置: 首页 > news >正文

【2335. 装满杯子需要的最短总时长】

来源:力扣(LeetCode)

描述:

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

方法:贪心 + 分类讨论
  

假设不同类型杯子的数量分别为 x, y 和 z,其中 x ≤ y ≤ z。

  • 如果 x + y ≤ z,那么每次装满 z 的时候,可以同时装满 x 或 y,因此总时长为 z。

  • 如果 x + y > z,令 t = x + y − z,因为 y − z ≤ 0,所以 t = x + y − z ≤ x ≤ y。

    • 如果 t 为偶数,相应的 x + y + z 也为偶数,那么可以同时将 x 和 y 都装满 t / 2 ,剩余的 x + y − t = z,可以同时装满,因此总时长为 t + z = (x + y − z) / 2 +z = (x + y + z) / 2 。
    • 如果 t 为奇数,相应的 x + y + z 也为奇数,那么可以同时将 x 和 y 都装满 (t − 1) / 2 ,剩余的 x + y − (t − 1) = z + 1 > z,因此总时长为 (t − 1) / 2 + z + 1 = (x + y − z − 1) / 2 + z + 1 = (x + y + z + 1) / 2 。

因此无论 t 为奇数还是偶数,总时长都为 ⌈(x + y + z) / 2 ⌉.

代码:

class Solution {
public:int fillCups(vector<int>& amount) {sort(amount.begin(), amount.end());if (amount[2] > amount[1] + amount[0]) {return amount[2];}return (accumulate(amount.begin(), amount.end(), 0) + 1) / 2;}
};

执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:11.3 MB, 在所有 C++ 提交中击败了76.39%的用户
复杂度分析
时间复杂度:O(1)。
空间复杂度:O(1)。
author:LeetCode-Solution

http://www.lryc.cn/news/3207.html

相关文章:

  • 再不跳槽,就晚了
  • Java 内存结构解密
  • ROS小车研究笔记2/11/2023:使用ssh远程登录小车
  • koa ts kick off 搭建项目的基本架子
  • h2database源码解析-查询优化器原理
  • 2月11日,30秒知全网,精选7个热点
  • vue组件的构成 <template> <script> <style>节点的使用 <
  • windows + vscode + rust
  • 二十九、异常处理
  • RTOS之二环境搭建初识RTOS
  • 【Java】 JAVA Notes
  • Java笔记-volatile和AtomicInteger
  • [标准库]STM32F103R8T6 高级定时器--PWM输出和带死区互补PWM输出
  • Camtasia2023最新版电脑视频录屏记录编辑软件
  • 管理用户安全性
  • 分享113个JS菜单导航,总有一款适合您
  • RuoYi-Cloud 部署
  • DockerFile文件详解
  • Java程序运行机制
  • LeetCode刷题------字符串
  • 区块链技术与应用2——BTC-数据结构
  • BiseNet v1论文及其代码详解
  • (超详细)Navicat的安装和激活,亲测有效
  • JDY-31蓝牙模块使用指南
  • 【2023】华为OD机试真题Java-题目0211-租车骑绿道
  • leetcode: 3Sum
  • 【Python学习笔记】26.Python3 输入和输出(2)
  • vue项目第二天
  • Python爬虫零基础到进阶(课程说明)
  • 《C++ Primer Plus》第16章:string类和标准模板库(13)