代码随想录算法训练营|day31

第八章 贪心算法

  • 455.分发饼干
  • 376.摆动序列
  • 53.最大子序和
  • 代码随想录文章详解

455.分发饼干

对饼干和胃口进行排序
遍历胃口,若当前饼干值<胃口值,饼干继续往后寻找更大值
否则计数+1,向后遍历饼干值使其满足下一个胃口值

func findContentChildren(g []int, s []int) int {sort.Ints(g)sort.Ints(s)count := 0for i, j := 0, 0; i < len(g) && j < len(s); i++ {for j < len(s) && s[j] < g[i] {j++}if j < len(s) {count++j++}}return count
}

376.摆动序列

(1)贪心
寻找最长子摆动序列:只需记录波峰+波谷出现的次数。对于序列两端的元素,只有一侧相邻元素小于或大于当前元素也满足要求
若遇到平坡,只需在坡度发生摆动变化时记录

func wiggleMaxLength(nums []int) int {if len(nums) <= 1 {return len(nums)}count := 1curDiff := 0preDiff := curDifffor i := 1; i < len(nums); i++ {curDiff = nums[i] - nums[i-1]if preDiff <= 0 && curDiff > 0 || preDiff >= 0 && curDiff < 0 {count++preDiff = curDiff}}return count
}

(2)动态规划
nums[i] < nums[i - 1],由波峰转移过来【波谷】,或者保持原状态【持续向下坡度】;
nums[i] > nums[i - 1],由波谷转移过来【波峰】,或者保持原状态【持续向上坡度】

func wiggleMaxLength(nums []int) int {if len(nums) <= 1 {return len(nums)}up, down := 1, 1for i := 1; i < len(nums); i++ {if nums[i] < nums[i-1] {down = max(up+1, down)} else if nums[i] > nums[i-1] {up = max(down+1, up)}}return max(up, down)
}

53.最大子序和

最大连续子序和
(1)贪心
若以nums[i]结尾求和小于当前值,取当前值,否则继续求和覆盖当前值。最大值为整个遍历过程中连续求和的最大值

func maxSubArray(nums []int) int {if len(nums) == 1 {return nums[0]}res := nums[0]for i := 1; i < len(nums); i++ {if nums[i]+nums[i-1] > nums[i] {nums[i] = nums[i-1] + nums[i]}res = max(res, nums[i])}return res
}

(2)动态规划
nums[i]结尾的最大连续子序列和:前一个最大和+ 当前值,或者直接选当前值
然后选取序列中和最大的结果

func maxSubArray(nums []int) int {dp := make([]int, len(nums))dp[0] = nums[0]res := dp[0]for i := 1; i < len(nums); i++ {dp[i] = max(dp[i-1]+nums[i], nums[i])res = max(dp[i], res)}return res
}

代码随想录文章详解

理论基础
455.分发饼干
376.摆动序列
53.最大子序和

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/681538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一起玩儿Proteus仿真(C51)——05. 红绿灯仿真(一)

摘要&#xff1a;本文介绍如何仿真红绿灯 今天来做一个红绿灯仿真的程序&#xff0c;这个程序主要包括一下这些功能&#xff1a; 模拟的路口为十字交叉路口&#xff0c;假设东西和南北方向都是双向行驶&#xff0c;因此需要设置4组红绿灯和4个倒计时显示屏。倒计时时间最长为9…

255.【华为OD机试真题】最小矩阵宽度(滑动窗口算法-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目二.解题思路三.题解代码Python题解代码JAVA题解…

【教程】C++语言基础学习笔记(七)——Array数组

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【C语言基础学习】系列文章 第一章 《项目与程序结构》 第二章 《数据类型》 第三章 《运算符》 第四章 《流程控制》 第五章…

Linux_进程概念

硬件系统 软件系统 进程概念 进程状态 孤儿进程 进程优先级 一.硬件系统 1.1 冯诺依曼体系结构 数学家冯诺依曼提出了计算机制造的三个基本原则&#xff0c;即采用二进制逻辑、程序存储执行以及计算机由五个部分组成&#xff08;运算器、控制器、存储器、输入设备、输出设备&a…

力扣-28. 找出字符串中第一个匹配项的下标

文章目录 力扣题目代码 力扣题目 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 示例 1&#xff1a…

Python学习之路-爬虫提高:scrapy基础

Python学习之路-爬虫提高:scrapy基础 为什么要学习scrapy 通过前面的学习&#xff0c;我们已经能够解决90%的爬虫问题了&#xff0c;那么scrapy是为了解决剩下的10%的问题么&#xff0c;不是&#xff0c;scrapy框架能够让我们的爬虫效率更高 什么是scrapy Scrapy是一个为了…

适应力和应变力是智能的重要组成部分

适应力和应变力在智能系统中扮演着非常重要的角色。在面对复杂、多变的环境和问题时&#xff0c;一个智能系统需要具备适应和调整自身行为的能力&#xff0c;这就需要依赖适应力和应变力。 适应力指的是系统对环境变化的感知、理解和调整能力。一个具有良好适应力的系统能够及时…

tee漏洞学习-翻译-3:TrustZone exploit for MSM8974

原文&#xff1a;http://bits-please.blogspot.com/2015/08/full-trustzone-exploit-for-msm8974.html 在这篇博文中&#xff0c;我们将介绍利用上一篇文章中描述的 TrustZone 漏洞的完整过程。 在开发此漏洞时&#xff0c;我只使用了我值得信赖的&#xff08;个人&#xff0…

120.乐理基础-五线谱-五线谱的多声部与指法问题

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;119.乐理基础-五线谱-五线谱的标记-CSDN博客 五线谱多声部与简谱的多声部一样&#xff1a;简谱的多声部 五线谱多声部例子&#xff1a;钢琴谱 另一个例子&#xff1a;在纵向上有多个音符 然后放大之后&#xff0c…

【51单片机】利用【时间延迟】的原理规避【按键抖动问题】

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 本章是51LCD单片机设计的一个环节&#xff0c;完整可前往相应博客查看完整传送门 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下…

详解CC++内存管理(new和delete)

文章目录 写在前面1. C&C内存分布2. C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free3. C内存管理方式&#xff08;语法&#xff09;3.1 new/delete操作内置类型3.2 new和delete操作自定义类型 4. new和delete的实现原理4.1 operator new与operator delete…

数据结构——6.2 图的存储与基本操作

6.2 图的存储与基本操作 概念 图的存储 邻接矩阵存有向图和无向图 根据邻接矩阵求度&#xff1a; 无向图&#xff1a;第i个结点的度 第i行 (或第列) 的非零元素个数 有向图&#xff1a; 第i个结点的出度 第i行的非零元素个数 第i个结点的入度 第i列的非零元素个数 第i个结…

Stable Diffusion教程——stable diffusion基础原理详解与安装秋叶整合包进行出图测试

前言 在2022年&#xff0c;人工智能创作内容&#xff08;AIGC&#xff09;成为了AI领域的热门话题之一。在ChatGPT问世之前&#xff0c;AI绘画以其独特的创意和便捷的创作工具迅速走红&#xff0c;引起了广泛关注。随着一系列以Stable Diffusion、Midjourney、NovelAI等为代表…

C#面:.NET中的错误(异常)处理机制是什么

.NET中的错误处理机制主要通过异常处理来实现&#xff0c;使用 try-catch 语句块来捕获和处理异常。 在C#中&#xff0c;异常是一种表示程序错误或异常情况的对象。当程序发生错误或异常时&#xff0c;会抛出一个异常对象&#xff0c;然后程序可以通过捕获和处理异常来进行错误…

linux信号机制[一]

目录 信号量 时序问题 原子性 什么是信号 信号如何产生 引入 信号的处理方法 常见信号 如何理解组合键变成信号呢&#xff1f; 如何理解信号被进程保存以及信号发送的本质&#xff1f; 为什么要有信号 信号怎么用&#xff1f; 样例代码 core文件有什么用呢&#…

vLLM vs Text Generation Interface:大型语言模型服务框架的比较

在大型语言模型&#xff08;LLM&#xff09;的世界中&#xff0c;有两个强大的框架用于部署和服务LLM&#xff1a;vLLM 和 Text Generation Interface (TGI)。这两个框架都有各自的优势&#xff0c;适用于不同的使用场景。在这篇博客中&#xff0c;我们将对这两个框架进行详细的…

Docker基础与持续集成

docker 基础知识&#xff1a; docker与虚拟机 !左边为虚拟机&#xff0c;右边为docker环境 – Server :物理机服务器Host OS &#xff1a;构建的操作系统Hypervisor &#xff1a;一种虚拟机软件&#xff0c;装了之后才能虚拟化操作系统Guest OS &#xff1a;虚拟化的操作系统…

突破编程_C++_基础教程(继承与多态)

1 继承 继承是面向对象编程的一个基本概念&#xff0c;它允许一个类&#xff08;派生类、子类&#xff09;继承另一个类&#xff08;基类、父类&#xff09;的属性和方法。继承可以减少代码冗余&#xff0c;提高代码重用性&#xff0c;并且有助于创建更复杂的类结构。 1.1 继…

自动驾驶轨迹规划之kinodynamic planning

欢迎大家关注我的B站&#xff1a; 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 本文PPT来自深蓝学院《移动机器人的运动规划》 目录 1.kinodynamic的背景 2. old-school pipline 3.example 1.kinodynamic的背景 kinodynami…

java之jvm详解

JVM内存结构 程序计数器 Program Counter Register程序计数器(寄存器) 程序计数器在物理层上是通过寄存器实现的 作用&#xff1a;记住下一条jvm指令的执行地址特点 是线程私有的(每个线程都有属于自己的程序计数器)不会存在内存溢出 虚拟机栈(默认大小为1024kb) 每个线…