LeetCode刷题笔记【23】:贪心算法专题-1(分发饼干、摆动序列、最大子序和)
文章目录
- 前置知识
- 贪心算法的本质
- 什么时候用贪心算法?
- 什么时候不能用贪心?
- 贪心算法的解题步骤
- 455.分发饼干
- 题目描述
- 解题思路
- 代码
- 376. 摆动序列
- 题目描述
- 解题思路
- 代码
- 53. 最大子序和
- 题目描述
- 暴力解法
- 动态规划
- 贪心算法
- 总结
前置知识
贪心算法的本质
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。
例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?
指定每次拿最大的,最终结果就是拿走最大数额的钱。
每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。
什么时候用贪心算法?
- 感觉像是可以用贪心
- 用题中的案例试一下, 发现没问题
- 尝试举一下反例, 发现没问题
- 那就可以用了
所以贪心算法并没有固定的规律和套路, 也不会要求你论证背后算法的合理性和有效性, 只要能解决问题, 通过测试案例即可.
ps:个人认为贪心非常虚无缥缈呀, 还是动态规划更加有迹可循;
并且在实践过程中, 可以用贪心算法的, 基本都可以用动态规划.
什么时候不能用贪心?
当局部最优, 不一定可以达到全局最优的时候, 如:
有一堆盒子,你有一个背包体积为n,如何把背包尽可能装;
如果还每次选最大的盒子,就不行了。
这时候就需要动态规划。
贪心算法的解题步骤
- 将问题分解为若干个子问题
- 找出适合的贪心策略
- 求解每一个子问题的最优解
- 将局部最优解堆叠成全局最优解
这样的叙述非常抽象, 实践过程中还是要把握思想: 选择每一阶段的局部最优,从而达到全局最优
参考文章:关于贪心算法, 你该了解这些
455.分发饼干
题目描述

LeetCode链接:https://leetcode.cn/problems/assign-cookies/description/
解题思路
思路: 先将两个数组都srot
遍历g数组, 优先满足胃口最小的孩子
遍历g数组中的元素gg的时候, 依次遍历s数组, 选择能满足gg的最小尺寸饼干
代码
class Solution {
public:int findContentChildren(vector<int>& g, vector<int>& s) {int ans=0;sort(g.begin(), g.end());sort(s.begin(), s.end());int ss=0;for(int gg : g){for(; ss<s.size(); ++ss){if(s[ss] >= gg){s[ss] = 0;ans++;break;}}}return ans;}
};
376. 摆动序列
题目描述

LeetCode链接:https://leetcode.cn/problems/wiggle-subsequence/description/
解题思路
<代>: 其实过程中不需要对数组进行操作, 只需要看有多少个点是符合要求的即可;
具体过程比较复杂, 建议参考其原文.
代码
class Solution {
public:int wiggleMaxLength(vector<int>& nums) {int n=nums.size();if(n==0 || n==1 || (n==2 && nums[0]!=nums[1]))return n;int curDiff = 0;int preDiff = 0;int ans=1;for(int i=0; i<n-1; ++i){curDiff = nums[i+1] - nums[i];if((preDiff<=0 && curDiff>0) || (preDiff>=0 && curDiff<0)){ans++;preDiff = curDiff;}}return ans;}
};
53. 最大子序和
题目描述

LeetCode链接:https://leetcode.cn/problems/maximum-subarray/description/
暴力解法
思路: 暴力解法
对数组中每个数, 都依次向后遍历所有子数组, 求和, 和ans取max
class Solution {
public:int maxSubArray(vector<int>& nums) {int ans=INT_MIN;for(int i=0; i<nums.size(); ++i){int sum=0;for(int j=i; j<nums.size(); ++j){sum += nums[j];ans = max(ans, sum);}}return ans;}
};
动态规划
不出所料的, 超出时间限制;
用动态规划, 创建数组maxSum
nums[0]的maxSum[0]就是自己本身
之后的nums[i]的maxSum[i]=max(nums[i], maxSum[i-1]+nums[i])
class Solution {
public:int maxSubArray(vector<int>& nums) {if(nums.size()==1)return nums[0];vector<int> maxSum(nums.size());maxSum[0] = nums[0];int ans=nums[0];for(int i=1; i<nums.size(); ++i){maxSum[i] = max(nums[i], maxSum[i-1]+nums[i]);ans = max(ans, maxSum[i]);}return ans;}
};
优化: 不用数组用pre
class Solution {
public:int maxSubArray(vector<int>& nums) {int ans = nums[0];int pre = nums[0];for(int i=1; i<nums.size(); ++i){pre = max(pre+nums[i], nums[i]);ans = max(ans, pre);}return ans;}
};
贪心算法

选取一个个"区间", 过程中用count记录区间内的和;
当count<0时, 将其清空(=0)
class Solution {
public:int maxSubArray(vector<int>& nums) {int ans = INT_MIN;int count=0;for(int i=0; i<nums.size(); ++i){count += nums[i];ans = max(ans, count);if(count<0)count = 0;}return ans;}
};
总结
相比于动态规划, 贪心算法的思路难把握的多, 也很难以揣摩;
所以过程中如果想不出来, 第一反应应该是尝试动态规划, 或者直接看题解;
一方面不要在做题过程中硬磕贪心算法;
另一方面在学习的时候, 不要过于较真, 对于贪心这一部分的内容, 可以适当抱着"了解"和:"探索学习"的心态.
把精力多花在可以比较快比较好地掌握和把握的部分和方法上.
本文参考:
分发饼干
摆动序列
最大子序和
相关文章:
LeetCode刷题笔记【23】:贪心算法专题-1(分发饼干、摆动序列、最大子序和)
文章目录 前置知识贪心算法的本质什么时候用贪心算法?什么时候不能用贪心?贪心算法的解题步骤 455.分发饼干题目描述解题思路代码 376. 摆动序列题目描述解题思路代码 53. 最大子序和题目描述暴力解法动态规划贪心算法 总结 前置知识 贪心算法的本质 贪心的本质是选择每一阶…...
C++算法 —— 分治(2)归并
文章目录 1、排序数组2、数组中的逆序对3、计算右侧小于当前元素的个数4、翻转对 本篇前提条件是已学会归并排序 1、排序数组 912. 排序数组 排序数组也可以用归并排序来做。 vector<int> tmp;//写成全局是因为如果在每一次小的排序中都创建一次,更消耗时间和…...
Hadoop YARN HA 集群安装部署详细图文教程
目录 一、YARN 集群角色、部署规划 1.1 集群角色--概述 1.2 集群角色--ResourceManager(RM) 1.3 集群角色--NodeManager(NM) 1.4 HA 集群部署规划 二、YARN RM 重启机制 2.1 概述 2.2 演示 2.2.1 不开启 RM 重启机制…...
BBS+商城项目的数据库表设计
本文章是对于BBS商城项目的数据库的初步设计,仅供参考! -- 创建用户表 CREATE TABLE Users (id bigint(20) PRIMARY KEY COMMENT 用户ID,username varchar(255) NOT NULL COMMENT 用户名,password varchar(255) NOT NULL COMMENT 密码,status int(1) DE…...
如何使用Savitzky-Golay滤波器进行轨迹平滑
一、Savitzky-Golay滤波器介绍 Savitzky-Golay滤波器是一种数字滤波器,用于平滑数据,特别是在信号处理中。它基于最小二乘法的思想,通过拟合数据到一个滑动窗口内的低阶多项式来实现平滑。这种滤波器的优点是它可以保留数据的高频信息&#…...
Nomad系列-Nomad网络模式
系列文章 Nomad 系列文章 概述 Nomad 的网络和 Docker 的也有很大不同, 和 K8s 的有很大不同. 另外, Nomad 不同版本(Nomad 1.3 版本前后)或是否集成 Consul 及 CNI 等不同组件也会导致网络模式各不相同. 本文详细梳理一下 Nomad 的主要几种网络模式 在Nomad 1.3发布之前&a…...
OpenCV项目开发实战--实现面部情绪识别对情绪进行识别和分类及详细讲解及完整代码实现
文末提供免费的完整代码下载链接 面部情绪识别(FER)是指根据面部表情对人类情绪进行识别和分类的过程。通过分析面部特征和模式,机器可以对一个人的情绪状态做出有根据的猜测。面部识别的这个子领域是高度跨学科的,借鉴了计算机视觉、机器学习和心理学的见解。 在这篇研究…...
Validate表单组件的封装
之前一直是直接去使用别人现成的组件库,也没有具体去了解人家的组件是怎么封装的,造轮子才会更好地提高自己,所以尝试开始从封装Form表单组件开始 一:组件需求分析 本次封装组件,主要是摸索封装组件的流程,…...
企业架构LNMP学习笔记32
企业架构LB-服务器的负载均衡之LVS实现: 学习目标和内容 1)能够了解LVS的工作方式; 2)能够安装和配置LVS负载均衡; 3)能够了解LVS-NAT的配置方式; 4)能够了解LVS-DR的配置方式&…...
基于Jetty9的Geoserver配置https证书
1.环境准备 由于Geoserver自带的jetty版本不具备https模块,所以需要下载完整版本jetty。这里需要先查看本地geoserver对应的jetty版本,进入geoserver安装目录,执行如下命令。 java -jar start.jar --version Jetty Server Classpath: -----…...
企业互联网暴露面未知资产梳理
一、互联网暴露面梳理的重要性 当前,互联网新技术的产生推动着各种网络应用的蓬勃发展,网络安全威胁逐渐蔓延到各种新兴场景中,揭示着网络安全威胁不断加速泛化。当前网络存在着许多资产,这些资产关系到企业内部的安全情况&#…...
【动态规划刷题 12】等差数列划分 最长湍流子数组
139. 单词拆分 链接: 139. 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入: …...
react-redux 的使用
react-redux React Redux 是 Redux 的官方 React UI 绑定库。它使得你的 React 组件能够从 Redux store 中读取到数据,并且你可以通过dispatch actions去更新 store 中的 state 安装 npm install --save react-reduxProvider React Redux 包含一个 <Provider…...
77 # koa 中间件的应用
调用 next() 表示执行下一个中间件 const Koa require("koa");const app new Koa();app.use(async (ctx, next) > {console.log(1);next();console.log(2); });app.use(async (ctx, next) > {console.log(3);next();console.log(4); });app.use(async (ctx,…...
【css】z-index与层叠上下文
z-index属性用来设置元素的堆叠顺序,使用z-index有一个大的前提:z-index所作用元素的样式列表中必须有position属性并且属性值为absolute、relative或fixed中的一个,否则z-index无效。 层叠上下文 MDN讲解 我们给元素设置的z-index都是有一…...
系统架构设计师(第二版)学习笔记----多媒体技术
【原文链接】系统架构设计师(第二版)学习笔记----多媒体技术 文章目录 一、多媒体概述1.1 媒体的分类1.2 多媒体的特征1.3 多媒体系统的基本组成 二、多媒体系统的关键技术2.1 多媒体系统的关键技术2.2 视频技术的内容2.3 音频技术的内容2.4 数据压缩算法…...
【面试经典150 | 数组】合并两个有序数组
文章目录 写在前面Tag题目来源题目解读解题思路方法一:合并排序方法二:双指针方法三:原地操作-从前往后方法四:原地操作-从后往前 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章…...
系统架构设计专业技能 ·操作系统
现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reality. 点击进入系列文章目录 系统架构设计高级技能 操作系统 一、操作系统概述二、进程管理2.1 进程概念2.2 进…...
CSP 202209-1 如此编码
答题 题目就是字多 #include<iostream>using namespace std;int main() {int n,m;cin>>n>>m;int a[n],c[n1];c[0]1;for(int i0;i<n;i){cin>>a[i];c[i1]c[i]*a[i];}for(int i0;i<n;i){cout<<(m%c[i1]-m%c[i])/c[i]<< ;} }...
windows安装向量数据库milvus
本文介绍windows下安装milvus的方法。 一.Docker安装 1.1docker下载 首先到Docker官网上下载docker:Docker中文网 官网 1.2.安装前前期准备 先使用管理员权限打开windows powershell 然后在powershell里面输入下面那命令,启用“适用于 Linux 的 Windows 子系统”…...
英雄联盟智能助手:5个核心功能彻底改变你的游戏体验
英雄联盟智能助手:5个核心功能彻底改变你的游戏体验 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为繁琐的游戏…...
N诺机试题
2.整除(末尾无空格用printf“ ”)#include<stdio.h>int main(){int count0;for(int i100;i<1000;i){if(i%50&&i%60){printf("%d",i);count;if(count%100) printf("\n");else printf(" "); }}return 0;…...
解决Beyond Compare 5授权问题的完整方案:BCompare_Keygen工具使用指南
解决Beyond Compare 5授权问题的完整方案:BCompare_Keygen工具使用指南 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 当你在使用Beyond Compare 5进行文件比较或同步操作时&#x…...
Joy-Con Toolkit:让Switch玩家掌控设备的开源管理方案
Joy-Con Toolkit:让Switch玩家掌控设备的开源管理方案 【免费下载链接】jc_toolkit Joy-Con Toolkit 项目地址: https://gitcode.com/gh_mirrors/jc/jc_toolkit 为什么Switch玩家需要专属管理工具? 当你插入Switch游戏卡带时,是否担心…...
PCB Layout实战:信号走线绕过ESD/TVS管,为何防护会失效?
1. 信号走线绕过ESD/TVS管的隐患 很多工程师在PCB设计时都听过一个原则:信号走线要先经过ESD/TVS保护器件,再连接到被保护芯片。但在实际项目中,由于空间限制或布线困难,经常会出现信号线先连接到芯片,再绕回保护器件的…...
电磁学核心概念与解题框架精讲(猴博士风格)
1. 电磁学基础概念拆解:从场强到电势 电场强度E和电势U是电磁学中最基础的两个物理量,就像描述一个人需要身高和体重两个指标一样。很多同学刚开始学电磁学时容易混淆这两个概念,我用一个简单的类比帮大家理解:想象电场强度就像山…...
软件信创方案(Word)
第1章 需求分析1.1 核心项目需求自主可控、资源池、云平台建设、运维运营管理、安全系统五大核心需求第2章 云平台基础设施设计2.1 改造目标与定位2.2 设计原则2.3 总体架构设计含网络架构、云平台整体架构2.4 资源配置设计含网络、计算、数据库、存储资源池及云管模块设计第3章…...
告别串口线!手把手教你用WCH-LinkE的SDI功能实现CH32V303RCT6的无线调试打印
无线调试革命:基于WCH-LinkE的SDI功能实现CH32V303RCT6高效打印 调试嵌入式系统时,串口打印是最常用的调试手段之一。然而传统串口调试需要占用宝贵的硬件UART资源,在IO口紧张或串口已被占用的场景下尤为不便。沁恒微电子推出的SDI(Serial Da…...
如何快速上手TradingView图表库:15+框架完整集成实战指南
如何快速上手TradingView图表库:15框架完整集成实战指南 【免费下载链接】charting-library-examples Examples of Charting Library integrations with other libraries, frameworks and data transports 项目地址: https://gitcode.com/gh_mirrors/ch/charting-…...
南京四季旅游攻略:最美时节去最美地方
南京四季旅游攻略:最美时节去最美地方 🌸🍃🍂❄️本文作者:南京码农 发布日期:2026年3月26日 关键词:南京旅游、四季景点、旅游攻略、南京必去、季节推荐前言:南京,一座四…...
