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

代码随想录算法训练营第三十五天-贪心算法4| ● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球

860.柠檬水找零

参考视频:贪心算法,看上去复杂,其实逻辑都是固定的!LeetCode:860.柠檬水找零_哔哩哔哩_bilibili 

解题思路:

只需要维护三种金额的数量,5,10和20。

有如下三种情况:

情况一:账单是5,直接收下。
情况二:账单是10,消耗一个5,增加一个10
情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5
此时大家就发现 情况一,情况二,都是固定策略,都不用我们来做分析了,而唯一不确定的其实在情况三。

而情况三逻辑也不复杂甚至感觉纯模拟就可以了,其实情况三这里是有贪心的。

账单是20的情况,为什么要优先消耗一个10和一个5呢?

因为美元10只能给账单20找零,而美元5可以给账单10和账单20找零,美元5更万能!

所以局部最优:遇到账单20,优先消耗美元10,完成本次找零。全局最优:完成全部账单的找零。

局部最优可以推出全局最优,并找不出反例,那么就试试贪心算法!
 

public class Leetcode860 {public boolean lemonadeChange(int[] bills) {int five = 0;int ten = 0;for (int i = 0; i < bills.length; i++) {if (bills[i] == 5) {five++;} else if (bills[i] == 10) {if (five < 1) {return false;}five--;ten++;} else if (bills[i] == 20) {if (ten >= 1 && five >= 1) {ten--;five--;} else if (five >= 3) {five -= 3;} else {return false;}}}return true;}
}

406.根据身高重建队列

解题思路:

那么按照身高h来排序呢,身高一定是从大到小排(身高相同的话则k小的站前面),让高个子在前面。

此时我们可以确定一个维度了,就是身高,前面的节点一定都比本节点高!

那么只需要按照k为下标重新插入队列就可以了,为什么呢?

public class Leetcode406 {public int[][] reconstructQueue(int[][] people) {Arrays.sort(people, (a, b) -> {if (a[0] == b[0]) return a[1] - b[1];return b[0] - a[0];});LinkedList<int[]> que = new LinkedList<>();for (int[] p : people) {que.add(p[1], p);}return que.toArray(new int[people.length][]);}
}

452. 用最少数量的箭引爆气球

解题思路:

如何使用最少的弓箭呢?

直觉上来看,貌似只射重叠最多的气球,用的弓箭一定最少,那么有没有当前重叠了三个气球,我射两个,留下一个和后面的一起射这样弓箭用的更少的情况呢?

尝试一下举反例,发现没有这种情况。

那么就试一试贪心吧!局部最优:当气球出现重叠,一起射,所用弓箭最少。全局最优:把所有气球射爆所用弓箭最少。

算法确定下来了,那么如何模拟气球射爆的过程呢?是在数组中移除元素还是做标记呢?

如果真实的模拟射气球的过程,应该射一个,气球数组就remove一个元素,这样最直观,毕竟气球被射了。

但仔细思考一下就发现:如果把气球排序之后,从前到后遍历气球,被射过的气球仅仅跳过就行了,没有必要让气球数组remove气球,只要记录一下箭的数量就可以了。

以上为思考过程,已经确定下来使用贪心了,那么开始解题。

为了让气球尽可能的重叠,需要对数组进行排序。

那么按照气球起始位置排序,还是按照气球终止位置排序呢?

其实都可以!只不过对应的遍历顺序不同,我就按照气球的起始位置排序了。

既然按照起始位置排序,那么就从前向后遍历气球数组,靠左尽可能让气球重复。

从前向后遍历遇到重叠的气球了怎么办?

如果气球重叠了,重叠气球中右边边界的最小值 之前的区间一定需要一个弓箭。

以题目示例: [[10,16],[2,8],[1,6],[7,12]]为例,如图:(方便起见,已经排序)
 

public class Leetcode452 {public int findMinArrowShots(int[][] points) {Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0]));int res = 0;for (int i = 1; i < points.length; i++) {if (points[i][0] > points[i - 1][1]) {res++;}if (points[i][0] <= points[i - 1][1]) {points[i][1] = Math.min(points[i - 1][1], points[i][1]);}}return res;}
}

相关文章:

代码随想录算法训练营第三十五天-贪心算法4| ● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球

860.柠檬水找零 参考视频&#xff1a;贪心算法&#xff0c;看上去复杂&#xff0c;其实逻辑都是固定的&#xff01;LeetCode&#xff1a;860.柠檬水找零_哔哩哔哩_bilibili 解题思路&#xff1a; 只需要维护三种金额的数量&#xff0c;5&#xff0c;10和20。 有如下三种情…...

2023MathorcupC题电商物流网络包裹应急调运与结构优化问题建模详解+模型代码(一)

电商物流网络包裹应急调运与结构优化问题 第三次继续写数模文章和思路代码了&#xff0c;不知道上次美赛和国赛大家有没有认识我&#xff0c;没关系今年只要有数模比赛艾特我私信我&#xff0c;要是我有时间我一定免费出文章代码好吧&#xff01;博主参与过十余次数学建模大赛…...

软件测试技术之跨平台的移动端UI自动化测试(上)

摘要&#xff1a;本文提出一种跨平台的UI自动化测试方案&#xff0c;一方面使用像素级的截图对比技术&#xff0c;解决传统UI自动化测试难以验证页面样式的问题&#xff1b;另一方面用统一部署在服务器端的JavaScript测试代码代替Android和iOS测试代码&#xff0c;大大提高编写…...

【MySQL--02】库的操作

文章目录1.库的操作1.1创建数据库1.2创建数据库的案例1.3字符集和校验规则1.3.1查看系统默认字符集以及校验规则1.3.2查看数据库支持的字符集1.3.3查看数据库支持的字符集校验规则1.3.4 校验规则对数据库的影响1.4操纵数据库1.4.1查看数据库1.4.2 删除数据库1.4.3显示创建语句1…...

人民链Baas服务平台上线,中创助力人民数据共建数据服务应用场景

人民链2.0是数据要素大发展时代下的可信联盟链 作为区块链分布式存储领域行业先驱与让人民放心的国家级数据云平台&#xff0c;中创算力与人民数据的合作从未间断。为了推动人民链2.0高质量发展&#xff0c;中创算力与人民数据开展了多方面合作&#xff0c;助力人民数据共建数据…...

说说如何借助webpack来优化前端性能?

通过webpack优化前端的手段有&#xff1a; ① JS代码压缩 ② CSS代码压缩 ③ HTML文件代码压缩 ④ 文件大小压缩 ⑤ 图片压缩 ⑥ Tree Shaking ⑦ 代码分离 ⑧ 内联 chunk 1、JS代码压缩 terser是一个JavaScript的解释、绞肉机、压…...

AiDD AI+软件研发数字峰会开启编程新纪元

随着OpenAI 推出全新的对话式通用人工智能工具——ChatGPT火爆出圈后&#xff0c;人工智能再次受到了工业界、学术界的广泛关注&#xff0c;并被认为向通用人工智能迈出了坚实的一步&#xff0c;在众多行业、领域有着广泛的应用潜力&#xff0c;甚至会颠覆很多领域和行业&#…...

【远程开发】VSCode使用Remote SSH远程连接Linux服务器

文章目录前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar4.2 创建隧道映射4.3 测试公网远程连接5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程转发自CSDN远…...

C++纯虚函数和抽象类详解

在C中&#xff0c;可以将虚函数声明为纯虚函数&#xff0c;语法格式为&#xff1a; virtual 返回值类型 函数名 (函数参数) 0; 纯虚函数没有函数体&#xff0c;只有函数声明&#xff0c;在虚函数声明的结尾加上0&#xff0c;表明此函数为纯虚函数。 最后的0并不表示函数返回…...

服务器上搭建jenkins打包工具

一、环境准备 1.安装jdk&#xff0c;这里我安装的jdk8 https://www.oracle.com/java/technologies/downloads/#java8 2.安装jenkins&#xff0c;使用镜像地址安装 https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/?CN&OD 注意要选择支持当前安装的jdk版…...

全球化背景下,如何利用内容营销促进跨境电商业务增长

随着全球跨境电商市场的迅速发展&#xff0c;越来越多的企业开始将注意力转向跨境电商。然而&#xff0c;随着竞争的激烈化&#xff0c;企业不再能够仅仅依靠产品本身来吸引消费者的注意。因此&#xff0c;内容营销成为了跨境电商企业在吸引、留住消费者方面的关键。在这篇文章…...

数据库系统工程师——第二章 程序语言基础知识

文章目录&#x1f4c2; 第二章、程序语言基础知识 &#x1f4c1; 2.1 程序语言概述 &#x1f4d6; 2.1.1 程序语言的基本概念 &#x1f4d6; 2.1.2 程序语言的基本成分 &#x1f4c1; 2.2 程序语言翻译基础 &#x1f4d6; 2.2.1 汇编程序基本原理 &#x1f4d6; 2.2.2 编译程序…...

UFT参数化的使用

使用Systemutil.Run打开程序。将01_Login/02_New Order/03_Logout三个操作分为3个Action。生成共享对象库关联到这三个Action。在01_Login操作模块中&#xff0c;将登录名和密码设置为环境变量参数&#xff0c;环境变量参数采用用户自定义&#xff0c;定义为AgentName和Passwor…...

Java模拟rank() over()函数获取分组排名的方法设计及实现

背景 考试批次班级姓名语文202302三年一班张小明130.00202302三年一班王二小128.00202302三年一班谢春花136.00202302三年二班冯世杰129.00202302三年二班马功成130.00202302三年二班魏翩翩136.00 假设我们有如上数据&#xff0c;现在有一个需求需要统计各学生语文单科成绩在班…...

不用但一定要懂 ---- iOS 之 响应链、传递链 与 手势识别

iOS 事件的主要由&#xff1a;响应连 和 传递链 构成。一般事件先通过传递链&#xff0c;传递下去。响应链&#xff0c;如果上层不能响应&#xff0c;那么一层一层通过响应链找到能响应的UIResponse。 响应链&#xff1a;由最基础的view向系统传递&#xff0c;first view ->…...

观早报 | 特斯拉储能超级工厂落沪;“华尔街之狼”募资550亿

今日要闻&#xff1a;京东拟今年发布千亿级产业大模型&#xff1b;特斯拉储能超级工厂落沪&#xff1b;“华尔街之狼”募资550亿&#xff1b;英特尔落户海南三亚&#xff1b;日本人要搞二次元老婆版 ChatGPT京东拟今年发布千亿级产业大模型 据《科创板日报》消息&#xff0c;京…...

SpringCloud集成Seata saga模式案例

文章目录一、前言二、Seata saga模式介绍1、示例状态图2、“状态机”介绍1&#xff09;“状态机”属性2&#xff09;“状态”属性3&#xff09;更多状态相关内容三、SpringCloud 集成 seata saga1、saga模式状态机相关信息1&#xff09;状态机配置相关的三个表2&#xff09;状态…...

逍遥自在学C语言 | 位运算符的高级用法

前言 在上一篇文章中&#xff0c;我们介绍了&运算符的基础用法&#xff0c;本篇文章&#xff0c;我们将介绍& 运算符的一些高级用法。 一、人物简介 第一位闪亮登场&#xff0c;有请今后会一直教我们C语言的老师 —— 自在。 第二位上场的是和我们一起学习的小白程序…...

Java实现输入行数打印取缔字符,打印金字塔三角形的两个代码程序

目录 前言 一、实现输入行数&#xff0c;打印取缔字符 1.1运行流程&#xff08;思想&#xff09; 1.2代码段 1.3运行截图 二、打印金字塔三角形 1.1运行流程&#xff08;思想&#xff09; 1.2代码段 1.3运行截图​​​​​​​ 前言 1.因多重原因&#xff0c;本博文有…...

express项目的创建

前言 前端开发者若要进行后端开发&#xff0c;大多都会选择node.js&#xff0c;在node生态下是有大量框架的&#xff0c;其中最受新手喜爱的便是老牌的express.js&#xff0c;接下来我们就从零创建一个express项目。 安装node 在这里&#xff1a;https://nodejs.org/dist/v16…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...