【代码随想录Day29】贪心算法Part03

server/2024/10/21 9:57:58/

134. 加油站

题目链接/文章讲解:代码随想录
视频讲解:算法>贪心算法,得这么加油才能跑完全程!LeetCode :134.加油站_哔哩哔哩_bilibili

java">class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {// 创建一个数组来存储每个加油站的剩余油量int[] rest = new int[gas.length];// 当前累计的剩余油量int curSum = 0;// 总剩余油量int totalSum = 0;// 起始加油站的索引int start = 0;// 遍历每个加油站for (int i = 0; i < gas.length; i++) {// 计算当前加油站的剩余油量rest[i] = gas[i] - cost[i];// 更新当前累计的剩余油量curSum += rest[i];// 更新总剩余油量totalSum += rest[i];// 如果当前累计的剩余油量小于0,说明从当前起始加油站出发无法完成环路if (curSum < 0) {// 将起始加油站更新为下一个加油站start = (i + 1) % gas.length;// 重置当前累计的剩余油量curSum = 0;}}// 如果总剩余油量小于0,说明无法完成环路,返回-1if (totalSum < 0) {return -1;}// 返回起始加油站的索引return start;}
}

135. 分发糖果

题目链接/文章讲解:代码随想录
视频讲解:算法>贪心算法,两者兼顾很容易顾此失彼!LeetCode:135.分发糖果_哔哩哔哩_bilibili

java">class Solution {public int candy(int[] ratings) {// 如果ratings为空,直接返回0if (ratings == null || ratings.length == 0) {return 0;}int n = ratings.length;int[] candyVec = new int[n];// 每个孩子至少分1个糖果candyVec[0] = 1; // 第一个孩子至少有1个糖果for (int i = 1; i < n; i++) {// 如果当前孩子的评分高于前一个孩子if (ratings[i] > ratings[i - 1]) {candyVec[i] = candyVec[i - 1] + 1; // 给当前孩子更多的糖果} else {candyVec[i] = 1; // 否则,当前孩子只能得到1个糖果}}// 从右到左遍历ratingsfor (int i = n - 2; i >= 0; i--) {// 如果当前孩子的评分高于下一个孩子if (ratings[i] > ratings[i + 1]) {// 更新当前孩子的糖果数,确保满足条件candyVec[i] = Math.max(candyVec[i], candyVec[i + 1] + 1);}}// 计算总糖果数int sum = 0;for (int i = 0; i < n; i++) {sum += candyVec[i];}return sum;}
}

860.柠檬水找零

题目链接/文章讲解:代码随想录
视频讲解:算法>贪心算法,看上去复杂,其实逻辑都是固定的!LeetCode:860.柠檬水找零_哔哩哔哩_bilibili

java">class Solution {public boolean lemonadeChange(int[] bills) {int[] count = new int[3]; // count[0]: $5 钞票, count[1]: $10 钞票, count[2]: $20 钞票for (int bill : bills) {if (bill == 5) {count[0]++;} else if (bill == 10) {if (count[0] == 0) {return false; // 没有足够的 $5 钞票来找零}count[0]--; // 找出一张 $5 钞票作为找零count[1]++;} else if (bill == 20) {// 优先找出一张 $10 和一张 $5 钞票(如果有的话)if (count[1] > 0 && count[0] > 0) {count[1]--;count[0]--;} else if (count[0] >= 3) {count[0] -= 3; // 找出三张 $5 钞票作为找零} else {return false; // 没有足够的钞票来找零}count[2]++; // 接受一张 $20 钞票}}return true; // 成功为所有钞票找零}
}

406.根据身高重建队列

题目链接/文章讲解:代码随想录
视频讲解:算法>贪心算法,不要两边一起贪,会顾此失彼 | LeetCode:406.根据身高重建队列_哔哩哔哩_bilibili

java">class Solution {public int[][] reconstructQueue(int[][] people) {// 首先对数组进行排序// 排序规则:按照高度降序排列,如果高度相同则按照k值升序排列Arrays.sort(people, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {if (o1[0] == o2[0]) {// 如果高度相同,按照k值升序排列return o1[1] - o2[1];}// 否则按照高度降序排列return o2[0] - o1[0];}});// 使用LinkedList来存储结果,因为LinkedList的插入操作效率较高LinkedList<int[]> que = new LinkedList<>();// 遍历排序后的数组,按照每个元素的k值插入到LinkedList中for (int[] p : people) {que.add(p[1], p);}// 将LinkedList转换为二维数组并返回return que.toArray(new int[people.length][]);}
}

http://www.ppmy.cn/server/128271.html

相关文章

深入了解 Ne10:优化 ARM 处理器的数字信号处理库

目录 引言什么是 Ne10&#xff1f;Ne10 的核心功能Ne10 的架构安装与使用 Ne10使用场景结论 引言 在现代计算中&#xff0c;数字信号处理&#xff08;DSP&#xff09;成为许多应用的重要组成部分&#xff0c;尤其是在音频、视频和图像处理领域。对于 ARM 处理器&#xff0c;Ne…

ZLMediaKit编译运行

ZLMediaKit-github官网 快速开始 代码依赖与版权声明 MediaServer支持的HTTP MediaServer支持的HTTP HOOK API cd ZLMediaKit mkdir build cd build cmake … && make -j20 cd ZLMediaKit/release/linux/Debug ./MediaServer //./MediaServer -h 查看 //./MediaSe…

Arthas match Elasticsearch

环境&#xff1a;windows elasticsearch:6.5.4 启动完Elasticsearch后&#xff0c;使用 arthas 遇到报错 java.security.AccessControlException: Access Denied 解决方法&#xff1a; JDK 所在目录下的目录jre/lib/security&#xff0c;修改java.policy文件&#xff0c;尾…

在Docker中运行微服务注册中心Eureka

1、Docker简介&#xff1a; 作为开发者&#xff0c;经常遇到一个头大的问题&#xff1a;“在我机器上能运行”。而将SpringCloud微服务运行在Docker容器中&#xff0c;避免了因环境差异带来的兼容性问题&#xff0c;能够有效的解决此类问题。 通过Docker&#xff0c;开发者可…

安卓13设置删除网络和互联网选项 android13隐藏设置删除网络和互联网选项

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改4.1修改方法14.2修改方法25.编译6.彩蛋1.前言 有些客户不想让用户修改默认的网络配置,禁止用户进入里面调整网络相关的配置。 2.问题分析 像这个问题,我们有好几种方法去处理,这种需求一般…

Python批量下载PPT模块并实现自动解压

日常工作中&#xff0c;我们总是找不到合适的PPT模板而烦恼。即使有免费的网站可以下载&#xff0c;但是一个一个地去下载&#xff0c;然后再批量解压进行查看也非常的麻烦&#xff0c;有没有更好方法呢&#xff1f; 今天&#xff0c;我们利用Python来爬取一个网站上的PPT&…

TSV(Through Silicon Via)即硅通孔技术和DFT

一种集成电路制造中的先进封装技术。它通过在芯片上穿孔并填充导电材料&#xff08;如铜、钨、多晶硅等&#xff09;&#xff0c;实现芯片内、芯片间以及芯片与封装之间的垂直连接。以下是TSV的主要制造工艺流程&#xff1a; 硅片准备&#xff1a;选择合适的硅片作为开始工艺的…

【QT Quick】C++交互:与QML类型转换

在本节课中&#xff0c;我们将讨论C与QML之间的数据类型转换。这种转换非常重要&#xff0c;因为在许多应用程序中&#xff0c;C生成的数据需要传递给QML&#xff0c;同时QML中的数据也需要被C访问和处理。我们将重点关注基本数据类型、数组类型和对象&#xff08;map&#xff…