代码随想录|Day26|贪心01|455.分发饼干、376.摆动序列、53.最大子数组和

455.分发饼干

大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子。

局部最优:尽量确保每块饼干被充分利用

全局最优:手上的饼干可以满足尽可能多的孩子

思路:大饼干 尽量分给 大胃口孩子

将小孩和饼干数组排序,我们从大到小遍历小孩。对于胃口最大的小孩,我们查看最大的饼干能否满足,如果不能,则说明此小孩无法被满足,无需查看其他更小的饼干,直接判断胃口稍微小一点的小孩。

 

class Solution:def findContentChildren(self, g: List[int], s: List[int]) -> int:g.sort()s.sort()count = 0# 定位到最大的饼干cookie_index = len(s) - 1# 遍历小孩for child_index in range(len(g) - 1, -1, -1):# 确保最大的饼干优先给胃口最大的小孩if cookie_index >= 0 and s[cookie_index] >= g[child_index]:count += 1cookie_index -= 1return count

376.摆动序列

由于本题让我们求最长摆动子序列的 长度,因此只需要 记录,而不需要 删减

在处理摆动序列问题时,主要会遇到以下几种情况:

  • 摆动

  • 连续上升

  • 连续下降

  • 平坡

只有 上升后下降 或者下降后上升,才能被记一次摆动,因此我们需要创建两个变量来记录 当前子序列最后一次的状态。

  • up变量:表示如果序列在当前点结束并且最后一次摆动是上升的,那么摆动序列的最长长度是多少。每当我们发现一个元素比前一个元素大,就意味着我们可以在之前的下降摆动序列的基础上增加一个上升摆动,因此up的值会更新为down + 1

  • down变量:表示如果序列在当前点结束并且最后一次摆动是下降的,那么摆动序列的最长长度是多少。每当我们发现一个元素比前一个元素小,就意味着我们可以在之前的上升摆动序列的基础上增加一个下降摆动,因此down的值会更新为up + 1

有了这两个变量,我们就不需要关心两个摆动之间的任何非摆动状态,因为前一个摆动的状态已经被两个变量记录。

class Solution:def wiggleMaxLength(self, nums: List[int]) -> int:n = len(nums)# 单个元素本身就是摆动序列,因此初始化最小摆动序列长度为 1if n < 2:return 1up = down = 1# 从第二个元素开始遍历for i in range(1, n):if nums[i] > nums[i-1]:up = down + 1elif nums[i] < nums[i-1]:down = up + 1return max(up, down)

53.最大子数组和

注意本题要求 连续子数组。有以下观察:

  • 当连续和为负数时,与后一个数相加,只会令其变得更小,应重新开始计算子数组和。
  • 当连续和为正数时,与后一个数相加,只会令其变得更大,应继续累加。
class Solution:def maxSubArray(self, nums: List[int]) -> int:max_sum = float('-inf')cur_sum = 0for num in nums:cur_sum += num# 维护最大子数组和if cur_sum > max_sum:max_sum = cur_sum# 如果子数组和为负,重新计算子数组和if cur_sum < 0:cur_sum = 0return max_sum

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

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

相关文章

ABAP笔记:定义指针,动态指针分配:ASSIGN COMPONENT <N> OF STRUCTURE <结构> TO <指针>.

参考大佬文章学习&#xff0c;总结了下没有提到的点&#xff1a;SAP ABAP指针的6种用法。_abap 指针-CSDN博客 定义指针&#xff1a;其实指针这玩意&#xff0c;就是类似你给个地方&#xff0c;把东西临时放进去&#xff0c;然后指针就是这个东西的替身了&#xff0c;写代码的…

洛谷day3

B2053 求一元二次方程 - 洛谷 掌握printf用法&#xff1b; #include <iostream> #include <cmath> using namespace std; double a,b,c; double delta; double x1,x2;int main() {cin>>a>>b>>c;delta b*b-4*a*c;if(delta>0){x1 (-bsqrt…

Linux查看磁盘空间

查看磁盘空间 df -h 查看目录所占空间 du -sh [目录] 查看当前目录下, 所有目录所占空间 (一级目录) find . -maxdepth 1 -type d -exec du -sh {} \;-maxdepth 1 查看的目录深度是1级, 2则是2级

从抛硬币试验看概率论的基本内容及统计方法

一般说到概率&#xff0c;就喜欢拿抛硬币做例子。大多数时候&#xff0c;会简单认为硬币正背面的概率各为二分之一&#xff0c;其实事情远没有这么简单。这篇文章会以抛硬币试验为例子并贯穿全文&#xff0c;引出一系列概率论和数理统计的基本内容。这篇文章会涉及的有古典概型…

注意力机制篇 | YOLOv8改进之添加CBAM注意力机制

前言:Hello大家好,我是小哥谈。CBAM是一种用于图像分类的注意力机制,全称为Convolutional Block Attention Module。它可以自适应地学习每个通道和空间位置的重要性,从而提高模型的性能。CBAM由两个部分组成:通道注意力模块和空间注意力模块。通道注意力模块通过学习每个通…

生物信息学文章中常见的图应该怎么看?

目录 火山图 热图 箱线图 森林图 LASSO回归可视化图&#xff08;套索图&#xff09; 交叉验证图 PCA图 ROC曲线图 这篇文章只介绍这些图应该怎么解读&#xff0c;具体怎么绘制&#xff0c;需要什么参数&#xff0c;怎么处理数据&#xff0c;会在下一篇文章里面给出 火山…

【】(综合练习)博客系统

在之前的学些中&#xff0c;我们掌握了Spring框架和MyBatis的基本使用&#xff0c;接下来 我们就要结合之前我们所学的知识&#xff0c;做出一个项目出来 1.前期准备 当我们接触到一个项目时&#xff0c;我们需要对其作出准备&#xff0c;那么正规的准备是怎么样的呢 1.了解需求…

基于Java中的SSM框架实现快餐店线上点餐系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现快餐店线上点餐系统演示 摘要 随着计算机互联网的高速发展。餐饮业的发展也加入了电子商务团队。各种网上点餐系统纷纷涌现&#xff0c;不仅增加了商户的销售量和营业额&#xff0c;而且为买家提供了极大的方便&#xff0c;足不出户&#xff0c;就能订…

代码随想录算法训练营第三十二天 | 122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II

代码随想录算法训练营第三十二天 | 122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II 122. 买卖股票的最佳时机 II题目解法 55. 跳跃游戏题目解法 45. 跳跃游戏 II题目解法 感悟 122. 买卖股票的最佳时机 II 题目 解法 贪心&#xff1a;局部最优&#xff1a;收集每…

计算机二级 公共基础知识点大全

计算机二级 公共基础知识点 第一章 数据结构与算法 1.1 算法 算法的定义&#xff1a;是指解题方案的准确而完整的描述。&#xff08;算法不等于程序&#xff0c;程序的设计不可能优于算法的设计&#xff09;算法的基本特征&#xff1a;可行性、确定性、有穷性、足够的情报。…

【算法每日一练]-动态规划(保姆级教程 篇17 状态压缩)#POJ1185:炮兵阵地 #互不侵犯

目录 今日知识点&#xff1a; 把状态压缩成j,dp每行i的布置状态&#xff0c;从i-1和i-2行进行不断转移 把状态压缩成j,dp每行i的布置状态&#xff0c;从i-1行进行状态匹配&#xff0c;然后枚举国王数转移 POJ1185&#xff1a;炮兵阵地 思路&#xff1a; 题目&#xff1a;互…

继承和多态(1)(继承部分)

继承 继承的概念 上文就是继承的概念。 必须记住父类也可以称为基类&#xff0c;超类。 子类也可以称为派生类。 继承的语法 在Java中如果要表示类之间的继承关系&#xff0c;需要借助extends关键字&#xff0c;具体如下&#xff1a; 修饰符 class 子类 extends 父类 {//…