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

Leetcode力扣秋招刷题路-2335

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结

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

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

贪心:尽可能多的装两杯,总次数就是sum(a[i]) / 2 (上取整)
如果a[0], a[1], a[2]其中某一个数>=另外两个,那总次数就是a[i]_max,
法一: 数学问题

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

优化

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

法二:堆 (本质和排序一样)
思路 :

把数组建成大根堆。

每一次都尽量装 2 杯不同的水 ( 每次都取出最大值t1和次大值t2 )

2.1 若!t1 直接break返回res (整个堆的元素都是 0 )

2.2 若t1 >= 1 && t2 >= 1,就装这两杯水 同时heap.insert(t1 - 1 and t2 - 1)

2.3 若t1 >= 1 && !t2 ,res += t1,然后break返回res

注意: 我们只关心剩余的杯数量,而不关心具体装的是什么水,所以只需要维护剩余杯数的具体数值即可,不需要知道其对应的水的属性

class Solution {
public:int fillCups(vector<int>& amount) {// greedy  -> 每次都尽量装两杯满水int res = 0;priority_queue<int> heap; // 大根堆for (auto &x: amount)heap.push(x);while (heap.size()){int t1 = heap.top();heap.pop();int t2 = heap.top();heap.pop();if (!t1) break; // 当前队列最大值是 0 说明所有 amount 都装满了 if (t1 >= 1 && t2 >= 1){heap.push(t1 - 1);heap.push(t2 - 1);}else if (t1 >= 1 && !t2){res += t1;break;}res ++;}return res;}
};

相关文章:

Leetcode力扣秋招刷题路-2335

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 2335. 装满杯子需要的最短总时长 现有一台饮水机&#xff0c;可以制备冷水、温水和热水。每秒钟&#xff0c;可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。 给你一个下标从 0 开…...

C语言深度解剖-关键字(6)

目录 1. 浮点型与零的比较&#xff1a; 1.1 推导&#xff1a; 1.2 实践&#xff1a; 总结&#xff1a; 理解强制类型转换&#xff1a; 指针与零比较 switch case 语句&#xff1a; 写在最后&#xff1a; 1. 浮点型与零的比较&#xff1a; 1.1 推导&#xff1a; 例&am…...

[多线程进阶]CAS与Synchronized基本原理

专栏简介: JavaEE从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录: 1.CAS 1.1 什么是CAS? 1.2 CAS伪代码 1.3 CAS …...

【Linux系统编程】02:文件操作

文件IO 系统调用&#xff08;不带缓冲的IO操作&#xff09;库函数&#xff08;默认带用户缓冲的IO操作&#xff09; 一、非缓冲IO 系统调用&#xff1a;即为不带缓冲的IO 1.打开文件open 2.读取文件read NAMEread - read from a file descriptorSYNOPSIS#include <unist…...

华为OD机试 - 去除多余空格(Python)| 真题+思路+代码

去除多余空格 题目 去除文本多余空格,但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标,去除多余空格后刷新关键词的起始和结束下标。 条件约束: 不考虑关键词起始和结束位置为空格的场景;单词的的开始和结束下标保证涵盖一个完整的单词,即一个坐标对开…...

百趣代谢组学分享,补充α-酮酸的低蛋白饮食对肾脏具有保护作用

文章标题&#xff1a;Reno-Protective Effect of Low Protein Diet Supplemented With α-Ketoacid Through Gut Microbiota and Fecal Metabolism in 5/6 Nephrectomized Mice 发表期刊&#xff1a;Frontiers in Nutrition 影响因子&#xff1a;6.59 作者单位&#xff1a;…...

json对象和formData相互转换

前言 大家都知道&#xff0c;前端在和后台进行交互联调时&#xff0c;肯定避免不了要传递参数&#xff0c;一般情况下&#xff0c;params 在 get 请求中使用&#xff0c;而 post 请求下&#xff0c;我们有两种常见的传参方式&#xff1a; JSON 对象格式和 formData 格式&#x…...

【c++面试问答】常量指针和指针常量的区别

问题 常量指针和指针常量有什么区别&#xff1f; const的优点 在C中&#xff0c;关键字const用来只读一个变量或对象&#xff0c;它有以下几个优点&#xff1a; 便于类型检查&#xff0c;如函数的函数 func(const int a) 中a的值不允许变&#xff0c;这样便于保护实参。功能…...

Ubuntu18下编译android的ffmpeg经验

虽然按照网上的一些资料&#xff08;如&#xff1a;最简单的基于FFmpeg的移动端例子&#xff1a;Android HelloWorld_雷霄骅的博客-CSDN博客_android ffmpeg 例子&#xff0c;&#xff0c;编译FFmpeg4.1.3并移植到Android app中使用&#xff08;最详细的FFmpeg-Android编译教程…...

Spring Security in Action 第十三章 实现OAuth2的认证端

本专栏将从基础开始&#xff0c;循序渐进&#xff0c;以实战为线索&#xff0c;逐步深入SpringSecurity相关知识相关知识&#xff0c;打造完整的SpringSecurity学习步骤&#xff0c;提升工程化编码能力和思维能力&#xff0c;写出高质量代码。希望大家都能够从中有所收获&#…...

本文章提供中国国界、国界十段线原始数据以及加载方法

本文章提供中国国界九段线原始数据和加载方法 1、中国国界 完整数据 包括十段线 中国国界线(完整版 包括十段线) 2、原始数据 中国国界十段线topojson格式数据.rar 中国国界线topjson数据 中国国界十段线svg格式数据.rar 中国国界线svg数据 中国国界十段线shp格式数据…...

一文带你搞懂,Python语言运算符

Python语言支持很多种运算符&#xff0c;我们先用一个表格为大家列出这些运算符&#xff0c;然后选择一些马上就会用到的运算符为大家进行讲解。 说明&#xff1a;上面这个表格实际上是按照运算符的优先级从上到下列出了各种运算符。所谓优先级就是在一个运算的表达式中&#x…...

JAVA集合专题4 —— Map

目录Map接口实现类的特点Map接口的常见方法Map六大遍历方式Map练习1code编程练习2code编程练习3思路codeMap接口实现类的特点 Map与Collection并列存在&#xff0c;是Map集合体系的顶级接口Map的有些子实现存储数据是有序的(LinkedHashMap)&#xff0c;有些子实现存储数据是无…...

二叉树进阶--二叉搜索树

目录 1.二叉搜索树 1.1 二叉搜索树概念 1.2 二叉搜索树操作 1.3 二叉搜索树的实现 1.4 二叉搜索树的应用 1.5 二叉搜索树的性能分析 2.二叉树进阶经典题&#xff1a; 1.二叉搜索树 1.1 二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;…...

牛客网Python篇数据分析习题(三)

1.现有一个Nowcoder.csv文件&#xff0c;它记录了牛客网的部分用户数据&#xff0c;包含如下字段&#xff08;字段与字段之间以逗号间隔&#xff09;&#xff1a; Nowcoder_ID&#xff1a;用户ID Level&#xff1a;等级 Achievement_value&#xff1a;成就值 Num_of_exercise&a…...

Java开发常见关键词集绵

一、关键词1&#xff1a; &#xff08;1&#xff09;RPC&#xff1a;远程过程调用&#xff08;Remote Procedure Call&#xff09;的缩写形式。远程调用的时候让人们觉得是本地调用。 &#xff08;2&#xff09;HTTP&#xff1a;超文本传输协议&#xff08;Hyper Text Transfer…...

解决idea出现的java.lang.OutOfMemoryError: Java heap space的问题

文章目录1. 复现问题2. 分析问题3. 解决问题4. 补充解决java.lang.OutOfMemoryError: PermGen space问题1. 复现问题 今天使用idea开发时&#xff0c;突然报出如下错误&#xff1a; Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat org.…...

为什么子进程要继承处理器亲缘性?

请先考虑一个典型的程序为什么需要启动一个子进程。(当然资源管理器不算一个典型的程序) 这是因为手头的任务被分解为子任务&#xff0c;无论出于何种原因&#xff0c;这些子任务都被放入子流程中。例如&#xff0c;在实现多次遍历型编译器/链接器时&#xff0c;其中每次遍历都…...

【算法】高精度

作者&#xff1a;指针不指南吗 专栏&#xff1a;算法篇 &#x1f43e;不能只会思路&#xff0c;必须落实到代码上&#x1f43e; 文章目录前言一、高精度加法二、高精度减法三、高精度乘法四、高精度除法前言 ​ 高精度即很大很大的数&#xff0c;超过了 long long 的范围&…...

计算机网络-基本概念

目录 计算机网络-基本概念 互联网 Java的跨平台原理 ​编辑 C\C的跨平台原理 解释性语言的跨平台原理(python,js等) 客户端 vs 服务器 什么是协议&#xff1f; 网络互连模型 请求过程 计算机之间的通信基础 计算机之间的连接方式-网线直连(需要用交叉线&#xff0c;而…...

别再硬啃官方文档了!用CentOS 7和Stein版OpenStack,30分钟搞定最小化部署

30分钟极速部署OpenStack Stein版&#xff1a;CentOS 7实战指南 当第一次接触OpenStack时&#xff0c;许多开发者都会被其庞大的组件和复杂的官方文档吓退。作为云计算基础设施的基石&#xff0c;OpenStack确实有着陡峭的学习曲线。但今天&#xff0c;我将带你用CentOS 7和Stei…...

3个理由告诉你:为什么这款轻量级内存管理工具Mem Reduct能让你的Windows电脑飞起来?

3个理由告诉你&#xff1a;为什么这款轻量级内存管理工具Mem Reduct能让你的Windows电脑飞起来&#xff1f; 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitc…...

OpenClaw 汉化版 Windows 一键安装指南|零基础 5 分钟部署 告别命令行

前言 在本地部署 AI 智能体时&#xff0c;英文界面晦涩、命令行操作复杂、环境配置繁琐&#xff0c;是很多零基础用户的三大痛点。OpenClaw 汉化中文版专为国内用户优化&#xff0c;采用全中文图形化界面 免环境配置 一键部署设计&#xff0c;全程无任何命令行操作&#xff…...

Windows 11终极优化指南:一键清理系统臃肿,免费提升51%性能

Windows 11终极优化指南&#xff1a;一键清理系统臃肿&#xff0c;免费提升51%性能 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to …...

不止是支付码:用vue-qr在后台管理系统生成带品牌Logo的物料二维码

企业级二维码生成方案&#xff1a;基于Vue-QR的后台管理系统深度整合 在数字化营销与产品管理的浪潮中&#xff0c;二维码已成为连接线上线下场景的关键纽带。对于企业级后台管理系统而言&#xff0c;快速生成带有品牌标识的定制化二维码&#xff0c;不仅能提升用户信任度&…...

ABAP 7.40+新语法实战:从传统代码到现代编程范式的重构

1. ABAP 7.40新语法带来的编程革命 十年前我刚接触ABAP时&#xff0c;代码风格还停留在SAP R/3时代的传统写法。每次看到满屏的DATA声明、LOOP...ENDLOOP和APPEND语句&#xff0c;就像在看上世纪90年代的编程教科书。直到ABAP 7.40版本发布&#xff0c;这个被称为"ABAP语言…...

ARM服务器生态挑战:从技术理想主义到商业现实的冷静分析

1. 数据中心微服务器市场&#xff1a;喧嚣背后的冷静审视最近几年&#xff0c;只要聊到数据中心硬件的未来&#xff0c;ARM架构进军服务器市场这个话题就一定会被反复提起。媒体和分析师们描绘了一幅美好的图景&#xff1a;低功耗、高密度的ARM微服务器将颠覆由英特尔X86主导的…...

归并排序:分治思想的经典应用

归并排序一、核心原理分治思想分&#xff1a;把数组不断从中间拆成左右两半&#xff0c;直到每个子数组只剩 1 个元素&#xff08;天然有序&#xff09;&#xff1b;治&#xff1a;把两个有序子数组 合并 成一个大的有序数组&#xff1b;递归向上合并&#xff0c;最终整个数组有…...

ECharts 数据可视化交互实战:从 dataZoom 到 roam 的缩放功能深度解析

1. 为什么需要数据缩放功能&#xff1f; 我第一次用ECharts做数据可视化时&#xff0c;遇到了一个很头疼的问题&#xff1a;当数据量特别大时&#xff0c;图表会变得特别拥挤&#xff0c;根本看不清细节。比如展示一整年的股票数据&#xff0c;密密麻麻的折线挤在一起&#xf…...

VIIRS/NPP夜光数据:从数据获取到区域分析的实用指南

1. VIIRS/NPP夜光数据入门指南 第一次接触VIIRS/NPP夜光数据时&#xff0c;我也被各种专业术语和数据产品搞得晕头转向。这种由美国国家海洋和大气管理局&#xff08;NOAA&#xff09;提供的夜间灯光遥感数据&#xff0c;已经成为城市发展、能源消耗和经济活动研究的重要数据源…...