算法:贪心算法

发布时间:2026/7/26 7:24:21

算法:贪心算法
引言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/7/26 7:24:21

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

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

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

2026/7/26 7:24:21

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

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

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

2026/7/26 7:24:21

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

专科生论文写作利器:千笔AI智能写作工具全解析

专科生论文写作利器:千笔AI智能写作工具全解析

2026/7/26 8:04:24

1. 专科生论文写作困境与AI工具崛起作为一名经历过论文写作全流程的过来人,我深知专科生在毕业论文写作过程中面临的种种挑战。从选题构思到文献综述,从数据收集到格式调整,每个环节都可能成为"拦路虎"。特别是在时间紧迫、导师指导…

QPSO-LSTM混合模型在风电与负荷预测中的应用

QPSO-LSTM混合模型在风电与负荷预测中的应用

2026/7/26 8:04:24

1. 项目概述与背景在电力系统调度与规划中,风电功率和电力负荷预测一直是两大核心难题。风电作为典型的间歇性能源,其出力受风速、风向、温度等多重因素影响,呈现出显著的随机性和波动性;而电力负荷则随着用户行为模式、天气变化、…

基于RAG的私有文档问答机器人开发指南

基于RAG的私有文档问答机器人开发指南

2026/7/26 8:04:24

1. 项目概述:构建带记忆的私有文档问答机器人在信息爆炸的时代,我们每天都要处理大量文档——公司政策、产品手册、技术文档等等。传统的关键词搜索已经无法满足我们对信息获取效率和质量的需求。这就是为什么我们需要一个能理解自然语言、能记住对话上下…

分布式电源接入下基于机器学习的配电网故障定位方法

分布式电源接入下基于机器学习的配电网故障定位方法

2026/7/26 8:04:24

1. 分布式电源对配电网故障定位的影响研究作为一名在电力系统领域工作多年的工程师,我深刻理解分布式电源(DG)接入给配电网带来的挑战。传统配电网就像一条单向流动的河流,而DG的接入则像在河流中加入了多个支流,使得水流方向变得复杂多变。这…

Java生态高效整合AI框架的工程实践与优化

Java生态高效整合AI框架的工程实践与优化

2026/7/26 8:04:24

1. 项目背景与核心挑战在AI技术快速落地的今天,Java生态作为企业级应用开发的主流选择,如何高效整合AI能力成为开发者面临的实际问题。我最近主导完成了多个AI框架在Java环境中的适配项目,发现其中存在三个典型矛盾点:Python生态的…

低成本硬件通信口扩展方案分享

低成本硬件通信口扩展方案分享

2026/7/26 7:54:23

低成本硬件通信口扩展方案分享一、方案分享二、TMUX1208PWR芯片介绍1、 关键特性与参数2、功能框图与引脚说明3、在通信接口扩展中的应用(如 CAN)4、使用注意事项5、 典型应用电路(以扩展 4 路 UART 为例)一、方案分享 我们拿can…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/26 0:04:02

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/26 0:04:02

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/26 0:04:02

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/26 0:04:02

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/26 0:04:02

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/26 0:04:02

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…