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

ops/2024/10/19 2:26:42/

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/ops/122480.html

相关文章

SpringBootWeb快速入门!详解如何创建一个简单的SpringBoot项目?

在现代Web开发中&#xff0c;SpringBoot以其简化的配置和快速的开发效率而受到广大开发者的青睐。本篇文章将带领你从零开始&#xff0c;搭建一个基于SpringBoot的简单Web应用~ 一、前提准备 想要创建一个SpringBoot项目&#xff0c;需要做如下准备&#xff1a; idea集成开发…

深入挖掘C++中的特性之一 — 多态

目录 1.多态的概念 2.多态的定义及其实现 1.虚函数 2.虚函数的重写/覆盖 3.实现多态的必要条件 4.多态的代码呈现 5.来一道小题&#xff0c;深入理解一下多态 3.虚函数重写的一些其他问题 1.协变 2.析构函数的重写 4.override和final关键字 5.重载/重写/隐藏的对比&…

Arduino UNO R3自学笔记22 之 Arduino电机的闭环控制(PID)

注意:学习和写作过程中,部分资料搜集于互联网,如有侵权请联系删除。 前言:上篇写了电机速度测定,这篇主要是讲测定出的速度用于反馈,使得实际速度快速响应到需要的速度。 1.控制系统介绍 分2大类:开环控制系统和闭环控制系统。 一般来说,开环控制构比较简单,成本较…

LiteAIServer最新版本功能免费发布,新支持视频质量诊断、老鼠识别、裸土、固废、扬尘识别

LiteAIServer持续迭代&#xff0c;目前已经支持行人入侵检测&#xff0c;烟火检测&#xff0c;工程车检测&#xff0c;玩手机打电话检测&#xff0c;厨帽检测&#xff0c;车辆检测&#xff0c;未戴安全帽检测&#xff0c;裸土检测&#xff0c;扬尘检测&#xff0c;固废检测&…

宠物空气净化器该怎么选?希喂、美的、有哈这三款有推荐的吗?

终于要到国庆了&#xff0c;这可是打工人除春节外最长的假期&#xff01;在外上班后&#xff0c;回家的次数越来越少了&#xff0c;这次国庆肯定要回去陪陪父母。这票是真难买啊&#xff0c;候补了我一个多星期才买到。本来以为最困难的问题已经解决了&#xff0c;又想到我家猫…

k8s 中的金丝雀发布(灰度发布)

目录 1 什么是金丝雀发布 2 Canary 发布方式 3 Canary 两种发布方式实操 3.1 准备工作 3.1.1 将 nginx 命名两个版本 v1 与 v2 3.1.2 暴露端口并指定微服务类型 3.1.3 进入 pod 修改默认发布文件 3.1.4 测试 service 是否正常 3.2 基于权重的灰度发布 3.2.1 创建 Igress 资源类…

FineReport 11 在线学习

文章目录 学习路线图FineReport 11 在线学习资源链接分享帆软report 特点 学习路线图 学习生态 自测题 FineReport 11 在线学习资源链接分享 帮助中心https://help.fanruan.com/finereport/ FineReport 入门学习路径https://edu.fanruan.com/guide/finereport 普通报表…

英语词汇小程序小程序|英语词汇小程序系统|基于java的四六级词汇小程序设计与实现(源码+数据库+文档)

英语词汇小程序 目录 基于java的四六级词汇小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&a…