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

news/2024/12/22 0:08:20/

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/news/1534192.html

相关文章

基于深度学习的不遗忘训练

基于深度学习的不遗忘训练&#xff08;也称为抗遗忘训练或持久性学习&#xff09;是针对模型在学习新任务时可能会忘记已学习内容的一种解决方案。该方法旨在使深度学习模型在不断接收新信息的同时&#xff0c;保持对旧知识的记忆。以下是这一领域的主要内容和方法&#xff1a;…

OpenCV-图像拼接

文章目录 一、基本原理二、步骤三、代码实现1.定义函数2.读取图像3.图像配准&#xff08;1&#xff09;.特征点检测&#xff08;2&#xff09;.特征匹配 4.透视变换5.图像拼接 四、图像拼接的注意事项 图像拼接是一种将多张有重叠部分的图像合并成一张无缝的全景图或高分辨率图…

JAVA并发编程高级——JDK 新增的原子操作类 LongAdder

LongAdder 简单介绍 前面讲过,AtomicLong通过CAS提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说它的性能已经很好了,但是JDK开发组并不满足于此。使用AtomicLong 时,在高并发下大量线程会同时去竞争更新同一个原子变量,但是由于同时只有一个线程的CAS操作会成功,…

Mac中访达显示/关闭隐藏文件

Mac中访达显示/关闭隐藏文件 您可以使用特殊的键盘快捷键查看 Mac 上的所有不可见项目。下面是具体步骤&#xff1a; 1、激活 Finder 应用程序&#xff0c; 打开可能包含此类文件的文件夹。 Command Shift 句点 【CMDShift.】3、如果您想再次隐藏文件&#xff0c;请再次重…

新品 | Teledyne FLIR IIS 推出Forge 1GigE SWIR 短波红外工业相机系列

近日&#xff0c;51camera的合作伙伴Teledyne FLIR IIS推出了新品Forge 1GigE SWIR 130万像素的红外相机。 Forge 1GigE SWIR系列的首款相机配备宽频带、高灵敏度的Sony SenSWIR™️ 130万像素IMX990 InGaAs传感器。这款先进的传感器采用5um像素捕捉可见光和SWIR光谱&#xff…

如何在 Ubuntu 22.04 上使用 Browserless?

Ubuntu 22.04Ubuntu 22.04 是一个基于 Debian 的 Linux 操作系统&#xff0c;它是一个长期支持版本 (LTS)&#xff0c;提供五年官方支持和安全更新。 它使用现代的 GNOME 桌面环境&#xff0c;优化了性能和稳定性&#xff0c;并包含最新的软件包和工具来支持新硬件。此外&…

浏览器发送请求后关闭,服务器的处理过程

之前在开发中&#xff0c;有些后端服务处理非常慢&#xff0c;页面可能会出现504 Gateway time-out的提示&#xff0c;或者服务器还没返回数据&#xff0c;浏览器就关掉了。我们只是看到了浏览器关掉&#xff0c;但是服务器和客户端的状态都是什么样的呢&#xff1f; 问题 在…

scrapy框架

1、认识scrapy scripy是一个爬取网站数据&#xff0c;提取结构性数据而编写的应用框架。它使用Twisted这个异步网络库来处理网络通讯&#xff0c;包含了各种中间件接口。 优点&#xff1a; 利用scrapy的设计实现了非阻塞的异步操作。相比于传统的阻塞式请求&#xff0c;极大的提…