算法:贪心算法

发布时间:2026/9/27 9:08:33

算法:贪心算法
引言376. 摆动序列 - 力扣LeetCode55. 跳跃游戏 - 力扣LeetCode45. 跳跃游戏 II - 力扣LeetCode134. 加油站 - 力扣LeetCode135. 分发糖果 - 力扣LeetCode代码第一题这是一道简单的贪心题目目的是找最长的摆动序列我们的想法就是记录上一个差值和本次差值只要差值相反那么我们就对结果1class Solution { public: int wiggleMaxLength(vectorint nums) { if (nums.size() 1) { return nums.size(); } int preDiff 0; int curDiff 0; int res 1; for (int i 0; i nums.size() - 1; i) { curDiff nums[i 1] - nums[i]; if ((curDiff 0 preDiff 0) || (curDiff 0 preDiff 0)) { res; preDiff curDiff; } } return res; } };第二题这一题思路不是很难但是实现起来却比较困难就是要实现一个最大的覆盖面积在已经遍历过了的点里面而且还要做到循环的处理这里就是改变了停止的条件cover每一次都是要保证是最大的而只要遍历的点超过了这个最大的覆盖区说明根本到达不了这个地方。class Solution { public: bool canJump(vectorint nums) { int cover 0; if (nums.size() 1) { return true; } for (int i 0; i cover; i) { cover max(cover, i nums[i]); if (cover nums.size() - 1) { return true; } } return false; } };第三题这一题相比于上一题有一个不同的地方就是判断走到终点要几步那么我们可以延续上一题的思路我们每当走到一个范围的终点的时候就会更新我们的范围不过在更新之前我们会判断这个范围与终点之间的关系。不过这一题和上一题有一个不同的地方就是这一题的范围不是在一边循环一边变化的是走完一个范围之后才会更新的这个也是因为我们题目里面已经保证了可以到达终点。class Solution { public: int jump(vectorint nums) { if (nums.size() 1) { return 0; } int ans 0; int nextDistance 0; int curDistance 0; for (int i 0; i nums.size(); i) { nextDistance max(nums[i] i, nextDistance); if (i curDistance) { ans; curDistance nextDistance; if (nextDistance nums.size() - 1) { break; } } } return ans; } };第四题我们创建一个数组来记录一下两个数组的差这样子就可以转化问题为从哪一个地方开始相加可以让和一直是正数。首先我们一定要先判断一下整个和相加一定要是正数否则无论从哪里开始都不可能保证是正数。然后我们按照顺序开始相加但是只要遇到了负数我们就从下一个开始重新计数。首先我们一开始都会对这个方法有疑问因为如果满足之后的和是正数但是一定可以保证再次加上之前的数也能是正数嘛~~~ 但是注意我们之前已经单独判断所有和加上去一定是正数了所以我们现在的所有操作是找到起点因为是这个起点是一定存在的既然之前的点已经测试过了不可以那么就往后面继续测呗~~~class Solution { public: int canCompleteCircuit(vectorint gas, vectorint cost) { vectorint nums(gas.size(), 0); for (int i 0; i gas.size(); i) { nums[i] gas[i] - cost[i]; } int index gas.size(); int sum 0; for (int i 0; i index; i) { sum nums[i]; } if (sum 0) { return -1; } sum 0; int startPos 0; bool flag true; for (int i 0; i index; i) { sum nums[i]; if (sum 0) { sum 0; startPos i 1; continue; } } return startPos; } };第五题这一题很难因为我们需要顾及左边又要顾及右边这种题目我们千万不要一下子兼顾两边我们要遍历两边先左边再右边。我们先把所有的数组都设置为1然后从左到右遍历只要右边比左边大那么右边的值就比左边的值大1。然后我们再从右边到左边遍历也就是如果右边大于左边那么就比左边的糖果大1但是因为也要满足上一次遍历的结果也就是右边比左边大的这个所以我们要利用上一次已经得到的结果1。不过一定要注意的是这两个数组是两个结果所以很可能对于一个点有两个结果我们为了要满足两次遍历的结果所以要取最大值。比如有可能1 2 3 4 5 1那么对于5这个数我们最后的结果应该是5个糖果。class Solution { public: int candy(vectorint ratings) { int sum 0; vectorint res(ratings.size(), 1); int index ratings.size(); for (int i 1; i index; i) { if (ratings[i] ratings[i - 1]) { res[i] res[i - 1] 1; } } for (int i index - 1; i 0; i--) { if (ratings[i - 1] ratings[i]) { res[i - 1] max(res[i - 1], res[i] 1); } } for (int result : res) { sum result; } return sum; } };

相关新闻

AM62L CBASS模块寄存器实战:从安全配置到总线错误调试

AM62L CBASS模块寄存器实战:从安全配置到总线错误调试

2026/9/27 9:05:42

1. 从手册到实战:理解AM62L CBASS模块的寄存器世界如果你正在基于德州仪器(TI)的AM62L Sitara™处理器进行嵌入式开发,尤其是涉及到系统安全、总线访问控制或者深度调试,那么你迟早会和它的CBASS模块打交道。CBASS&…

TI AM62L WKUP_PLL0时钟系统配置详解与实战

TI AM62L WKUP_PLL0时钟系统配置详解与实战

2026/8/24 22:35:32

1. AM62L WKUP_PLL0时钟系统概述在嵌入式系统开发中,时钟系统是决定整个芯片性能和稳定性的基石。对于像TI AM62L Sitara™这样的高性能异构处理器,其内部集成了多个锁相环(PLL)来为不同的子系统提供时钟源。其中,WKUP…

Docker容器网络实验手册 · 实验二

Docker容器网络实验手册 · 实验二

2026/9/23 11:25:28

文章目录 实验手册 实验二 实验二:Host(主机)模式与端口冲突 1. 实验目标 2. 核心知识点图解 3. 实验环境准备 4. 实验步骤 Step 1:启动 Host 模式的 Nginx 容器 Step 2:验证网络栈共享 Step 3:模拟端口冲突(核心实验) Step 4:宿主机端口占用排查 5. 实验原理深度解析…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/26 19:14:12

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/27 1:30:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/27 1:30:37

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/27 1:30:35

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/27 1:30:34

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/26 16:36:51

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/26 14:29:04

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/26 13:57:22

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/26 23:35:16

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…