代码随想录算法训练营day34 | 455.分发饼干、376. 摆动序列、53. 最大子序和

理论基础

贪心的本质是选择每一阶段的局部最优,从而达到全局最优。

刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心。

455.分发饼干

result和j变化一致,可以去除一个

class Solution:def findContentChildren(self, g: List[int], s: List[int]) -> int:# 分配能满足孩子胃口的最小饼干。胃口排序,饼干也排序g.sort()s.sort()# 遍历饼干,如果当前饼干满足不了当前最小孩子的胃口,肯定也满足不了后续的孩子,饼干继续循环# 如果当前饼干满足了当前孩子的胃口,则当前饼干给当前孩子吃,结果+1,孩子胃口也向后遍历一个j = 0  # 胃口索引result = 0for i in s:if j < len(g) and g[j] <= i:result += 1j += 1return result

376. 摆动序列

这道题可以使用贪心,也可以使用动态规划。这道题对我来说挺难,还需要继续思考

使用贪心需要考虑情况较多

class Solution:def wiggleMaxLength(self, nums: List[int]) -> int:if len(nums) <= 1:return len(nums)  # 如果数组长度为0或1,则返回数组长度preDiff = 0  # 前一对元素的差值result = 1  # 记录峰值的个数,初始为1(默认最右边的元素被视为峰值)for i in range(len(nums) - 1):curDiff = nums[i + 1] - nums[i]  # 计算下一个元素与当前元素的差值# 如果遇到一个峰值if (preDiff <= 0 and curDiff > 0) or (preDiff >= 0 and curDiff < 0):result += 1  # 峰值个数加1preDiff = curDiff  # 注意这里,只在摆动变化的时候更新preDiffreturn result  # 返回最长摆动子序列的长度

使用动态规划

class Solution:def wiggleMaxLength(self, nums: List[int]) -> int:dp = [[0, 0] for _ in range(len(nums))]  # 创建二维dp数组,用于记录摆动序列的最大长度dp[0][0] = dp[0][1] = 1  # 初始条件,序列中的第一个元素默认为峰值,最小长度为1for i in range(1, len(nums)):dp[i][0] = dp[i][1] = 1  # 初始化当前位置的dp值为1for j in range(i):if nums[j] > nums[i]:dp[i][1] = max(dp[i][1], dp[j][0] + 1)  # 如果前一个数比当前数大,可以形成一个上升峰值,更新dp[i][1]for j in range(i):if nums[j] < nums[i]:dp[i][0] = max(dp[i][0], dp[j][1] + 1)  # 如果前一个数比当前数小,可以形成一个下降峰值,更新dp[i][0]return max(dp[-1][0], dp[-1][1])  # 返回最大的摆动序列长度

53. 最大子序和

本题可以用贪心,也可以用动态规划

贪心

class Solution:def maxSubArray(self, nums: List[int]) -> int:result = float("-inf")count = 0for num in nums:count += numresult = max(count, result)if count < 0:count = 0return result

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

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

相关文章

Jenkins配置(插件/角色/凭证)

目录 传送门前言一、Jenkins插件管理1、更换为国内下载源2、中文汉化插件下载&#xff08;不推荐&#xff09;3、低版本Jenkins爆红插件安装4、低版本Jenkins插件持续报错解决办法 二、Jenkins用户角色三、Jenkins凭证管理&#xff08;svn/git&#xff09;1、Username with pas…

Qt hide()和setVisible(false)区别

前言 在一些场景下&#xff0c;我们需要控制控件的显示与隐藏&#xff0c;QWidget 类提供了两种方法来隐藏控件hide() 和 setVisible(false)。那么他们有何区别呢&#xff1f; widget->hide(); // &#xff1f; widget->setVisible(false);hide() 和 setVisible(false…

【本周面试问题总结】

01.如何判断链表中是否有环 ①穷举遍历&#xff1a;从头节点开始&#xff0c;依次遍历单链表中的每一个节点。每遍历到一个新节点&#xff0c;将新节点和此前节点进行比较&#xff0c;若已经存在则说明已被遍历过&#xff0c;链表有环。 ②快慢指针&#xff1a;创建两个指针&am…

NIO流(多路复用技术)

目录 什么是NIO使用场景 NIO(new IO)相关包路径NIO的实现基础NIO的核心组件Buffer缓冲区详解数据如何从磁盘读到用户进程 ChannelChannel的使用 其他组件字符集和Charset文件锁NIO工具类使用Files的FileVisitor遍历文件和目录使用WatchService监控文件变化访问文件属性 什么是N…

什么样的无线麦克风好?一文看懂哪种麦克风降噪效果好

作为视频创作者&#xff0c;拍摄视频除了要注意拍摄的画质外&#xff0c;声音的录制也很重要。声音录制的清晰度也会直接影响整个作品的整体水平&#xff0c;要想录的声音清晰&#xff0c;有专业级录制效果&#xff0c;必须选好麦克风&#xff0c;而无线领夹麦克风&#xff0c;…

craco-less 插件如何使用

craco-less 是一个用于 Create React App (CRA) 的插件&#xff0c;它允许你在项目中无缝集成和使用 Less 作为样式预处理器。以下是如何在你的 React 项目中配置并使用 craco-less 插件的步骤&#xff1a; 安装所需依赖 首先&#xff0c;确保你已经安装了 create-react-app …

SCSS入门指南:基本语法与高效用法

关于SCSS&#xff08;Sassy CSS&#xff09;基本使用的文章概述&#xff1a;### 1. SCSS简介* SCSS是一种CSS的扩展语言&#xff0c;它允许开发者使用更强大、更灵活的语法来编写样式表。* SCSS提供了变量、嵌套规则、混合宏等高级功能&#xff0c;使得CSS代码更加模块化和可维…

单片机控制语音芯片的录放音系统的设计

[摘 要]:介绍了由Flash单片机AT89C2051及数码语音芯片ISD2560组成的电脑语音系统设计出了系统的硬件电路,给出了录、放音实用的源程序。目前基于单片微机的语音系统的应用越来越广泛,如电脑语音钟、语音型数字万用表、手机话费查询系统、排队机、监控系统语音报警以及公共汽…

硕士大论文参考文献标准格式

硕士大论文参考文献标准格式 期刊会议硕士论文 参考文献往往是格式的重灾区&#xff0c;因为谷歌学术默认的引用并不一定是完全正确的 注意事项&#xff1a; 统一所有参考文献的名称格式&#xff0c;要么名称全部用首字母大写&#xff0c;要么全部只有第一个单词的首字母大写…

【工具分享】Annabelle勒索病毒解密工具

前言 Annabelle勒索病毒灵感来自恐怖电影系列 Annabelle。除了文件加密功能外&#xff0c;Annabelle 勒索软件还会试图禁用防火墙&#xff0c;强制停止一系列正在运行程序&#xff0c;通过连接的 USB 驱动器进行传播。 特征 勒索内容&#xff1a; Annabelle 使用 AES256 CBC 加…

【Linux】线程同步和生产者-消费者模型

目录 一. 线程同步1. 条件变量2. 条件变量接口条件变量的创建及初始化条件变量的销毁条件变量等待条件变量唤醒 3. 条件变量同步解决抢占问题 二. 生产者-消费者模型1. 什么是生产者-消费者模型2. 为什么要使用生产者-消费者模型3. 生产者-消费者模型特点4. 基于阻塞队列实现生…

技术前沿:三品PLM系统引领工程变更管理新趋势

引言 在当今快速变化的制造行业&#xff0c;产品生命周期管理&#xff08;PLM&#xff09;系统已成为企业不可或缺的工具之一。PLM系统不仅帮助企业优化产品开发流程&#xff0c;还对工程变更管理&#xff08;ECM&#xff09;起着至关重要的作用。本文将探讨PLM系统在工程变更…

解决ssh报错,.ssh/id_rsa: No such file or directory Permission denied (publickey)

拉取依赖或者代码时说没有权限 首先我们可以看到的是这个报错但是我们的远程确实配置ssh密钥 首先我们可以看到的是这个报错 但是我们的远程确实配置ssh密钥 我们可以在我们项目路径下添加一下我们的私钥如&#xff1a; 首先确定我们ssh是正常启动的eval $(ssh-agent)我们可以…

前端下载功能

1.创建a标签并点击 let a document.createElement(a); a.href url; a.download name.xlsx; a.click(); 2.如果只是替换了当前路由并预览的话&#xff0c;可以强制浏览器下载 var pdfUrl "" // 替换为你的PDF文件链接 fetch(pdfUrl).then(response > respons…

AC/DC电源模块:提供高质量的电力转换解决方案

BOSHIDA AC/DC电源模块&#xff1a;提供高质量的电力转换解决方案 AC/DC电源模块是一种电力转换器件&#xff0c;可以将交流电转换为直流电。它通常用于各种电子设备和系统中&#xff0c;提供高质量的电力转换解决方案。 AC/DC电源模块具有许多优点。首先&#xff0c;它能够提…

让大模型变得更聪明:人工智能的未来发展之路

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

以JVM新特性看Java的进化之路:从Loom到Amber的技术篇章

引言&#xff1a; JVM的最新特性通过在效率、功能和易用性方面的创新&#xff0c;对Java的未来发展产生了深远的影响。以下是几个关键特性如何塑造了Java的未来&#xff1a; 正文&#xff1a; 轻量级并发 - 项目Loom&#xff1a; 项目Loom通过引入虚拟线程&#xff08;也被称为…

飞桨图像识别套件PaddleClas安装

安装验证 使用以下命令可以验证 PaddlePaddle 是否安装成功。 import paddle paddle.utils.run_check() 查看 PaddlePaddle 版本的命令如下&#xff1a; python -c "import paddle; print(paddle.__version__)" 安装 PaddleClas 及其 Python 依赖库 [建议] 直接…

江苏职称申报大揭秘:你所不知道的那些细节

大家好&#xff01;今天我将带大家深入探索江苏职称申报的一些你可能从未关注过的细节。对于在江苏工作的工程类小伙伴们来说&#xff0c;这些信息或许能助你一臂之力&#xff0c;让你在职称申报的道路上更加顺畅。 我们要明确的是&#xff0c;江苏省的工程类职称申报主要有三种…

每日一题——只需一行Python秒杀:PAT乙级1009 说反话!但不能故步自封!(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 各部分功能分析&#xff1a; 综合时间复杂度 综合空间复杂度 总结 思路…