LeetCode-2335. 装满杯子需要的最短总时长【贪心,数学】

2023-11-13

题目描述:

现有一台饮水机,可以制备冷水、温水和热水。每秒钟,可以装满 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,答案直接是最大的z。第二种:x+y>z。先将x与y互相匹配t次直到x+y<=z。那么t=(x+y-z)/2向上取整,即t>=1。取消向上取整则t=(x+y-z+1)/2,然后变回第一种情况,总的时长为t+z=(x+y+z+1)/2。

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

时间复杂度:O(1)
空间复杂度:O(1)

解题思路二:优化,一行代码!

直接返回四个数中最大的那一个即可。

class Solution {
public:
    int fillCups(vector<int>& a) {
        return max({a[0], a[1], a[2], (a[0] + a[1] + a[2]+1)/2});
    }
};

时间复杂度:O(1)
空间复杂度:O(1)

解题思路三:比较费时但好理解的,排序然后大的两个数减1,记次数。

class Solution {
public:
    int fillCups(vector<int>& a) {
        int s=0;
        while(a[0]||a[1]||a[2]){
            sort(a.begin(),a.end());
            s++;
            if(a[1]) a[1]--;
            if(a[2]) a[2]--;
        }
        return s;
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode-2335. 装满杯子需要的最短总时长【贪心,数学】 的相关文章

随机推荐

  • 40 个 常用的 SpringBoot 注解,你知道几个?

    一 Spring Web MVC 与 Spring Bean 注解 Spring Web MVC 注解 RequestMapping RequestMapping注解的主要用途是将Web请求与请求处理类中的方法进行映射 Spring MVC
  • eNSP——VLAN配置实验

    目录 一 新建拓扑 二 配置LSW5 三 配置LSW6 一 新建拓扑 实现效果 PC10可以ping通PC12 ping不通PC11 PC13 二 配置LSW5 1 系统视图开启VLAN100 2 进入接口G0 0 1配置VLAN acce
  • signature=b05c505286f606b32d69ab58ee3e7bf4,reduce-css-calc/yarn.lock at 0f6c532cf9dc52ac3cb23e143eaf...

    THIS IS AN AUTOGENERATED FILE DO NOT EDIT THIS FILE DIRECTLY yarn lockfile v1 ava babel preset stage 4 1 0 0 version 1 1
  • 云计算之你必须知道的几个会议和杂志

    云计算现在被大家炒的热火朝天 那么很多人也想更多了解云计算 那么我就给大家介绍几个杂志和网站 IEEE International Conference on Cloud Computing http www thecloudcomputi
  • vue中的promise对象,async和await学习记录

    promise有待学习 先记录一下最近再项目中学的关于async和await async await 其实就是用同步的写法去实现异步方法 async deleteproduct record const result await produ
  • npm 配置淘宝镜像

    首先解释一下 npm 为什么要配置淘宝镜像 原因 因为node js 默认使用的是国外的网站 国内访问有一个跨国内局域网的操作 所以就会有时候很慢 这就跟为什么网站的静态资源有些会使用CDN 加速一样的 淘宝镜像是什么 就是npm 很多的插
  • hive转义问题详解

    hive转义问题详解 引言 hive控制台执行 字符串不包含 字符串包含 hive e的方式嵌入到shell脚本执行 字符串不包含 字符串包含 总结 引言 hive转义问题想必进来的同学都遇到过 这里就直奔主题了 此类问题大致可以分为两种常
  • Linux上快速安装软RAID详细步骤

    常见问题服务平台 2018 11 17 物理环境 虚拟机CentOS6 4 配置 8G内存 2 2核cpu 3块虚拟硬盘 sda sdb sdc sdb和sdc是完全一样的 在实际生产环境中 系统硬盘与数据库和应用是分开的 这样有利于系统的
  • HDRP

    HDRP 的 10 版本支持 Unity 2020 LTS 及以上 新版的 HDRP 软件包将继续优化用户友好的界面 灵活的功能 管线的稳定性和总体性能 但如果想将 HDRP 设置到最佳状态 你必须要了解所有主要的管线设置 及其背后的原理和
  • Oracle报错:IO Error: The Network Adapter could not establish the connection

    Caused by oracle net ns NetException The Network Adapter could not establish the connection at oracle net nt ConnStrateg
  • 深度学习框架Pytorch快速开发与实践

    决定用两个星期读完这本书 并自己用Pytorch搭建一个模型 2019 8 5 第一章深度学习介绍 明确学习目标 深度学习难点不是深度学习本身 难的是你要吃透问题 如何用深度学习的逻辑去思考你自己的问题 有针对性地设计模型 难的是你有分析问
  • 机器学习系列(7)_机器学习路线图(附资料)

    作者 龙心尘 寒小阳 时间 2016年2月 出处 http blog csdn net longxinchen ml article details 50749614 http blog csdn net han xiaoyang arti
  • epoll高度封装reactor,几乎所有可见服务器的底层框架

    目录 前言 reactor是什么 如何理解 reactor所需组件流程分析 组件 流程 如何将epoll的IO驱动封装成reactor事件反应堆驱动 reactor分块分析实现 注册事件处理器部分流程 多路复用器监视多路IO事件 事件分发器
  • 【React学习】React更新渲染原理

    当我们调用 setState 之后发生了什么 react经历了怎样的过程将新的 state 渲染到页面上 一次react更新 核心就是对虚拟dom进行diff 找出最少的需要变化的dom节点 然后对其进行相应的dom操作 用户即可在页面上看
  • MySQL数据导入--load data

    起因 朋友的数据库 用的版本是5 5 19 服务端和客户端字符集都是utf8 因为某些原因 系统经过好多人的开发和处理 同一个表存在多种字符集写入 so乱码问题 时有发生 为了彻底解决这个问题 我这边的操作如下 1 核查工程中转码的地方 2
  • Python初学者的一个常见错误

    大家都知道 列表是可变数据类型 而可变数据类型的操作尤其需要我们细心 不然很容易出错 来看看这个例子 list1 1 2 3 4 5 list2 list1 3 print list2 list1 2 b list2 1 1 a print
  • [从零开始学DeepFaceLab-8]: 使用-命令行八大操作步骤-第5步:从源图片中提取所需图片

    目录 总体流程 步骤5 从源视频中提取图片 5 1 命令 5 data dst faceset extract manual fix bat 不推荐使用
  • vue回车事件

    一 需求 需求 登录页面在输入密码后 按回车键 Enter 触发登录 二 实现 部分代码 重点事件 keyup enter native 指的是回车监听事件 举例 keyup enter native submitForm ruleForm
  • 贪心算法——排队打水问题

    6 3 排队打水问题 有n个人排队到r个水龙头去打水 他们装满水桶的时间为t1 t2 tn为正整数且个不相等 应如何安排他们打水顺序才能使他们花费的时间最少 算法分析 时间总和 等待时间 装水时间 采用贪心思想 先sort 默认将装水时间从
  • LeetCode-2335. 装满杯子需要的最短总时长【贪心,数学】

    LeetCode 2335 装满杯子需要的最短总时长 贪心 数学 题目描述 解题思路一 其实像一道数学题目 假设三个杯子x lt y lt z先分两种情况 第一种 x y lt z 答案直接是最大的z 第二种 x y gt z 先将x与y互