当前位置: 首页 > news >正文

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

455.分发饼干

目标:

  • g[i]:第i个孩子的胃口值(至少要这么大的饼干才满足)
  • s[j]:第j块饼干的尺寸
    每个孩子最多一块饼干、每块饼干最多给一个孩子。
    问最多能满足多少孩子。

核心思路:贪心 + 排序 + 双指针

策略:用最小的饼干去满足胃口最小的孩子,能满足就给,不满足就换更大的饼干。

步骤:

  1. gs都排序
  2. 两个指针:
    • i指向当前孩子(从小胃口开始)
    • j指向当前饼干(从小尺寸开始)
  3. 如果s[j] >= g[i]:满足一个孩子,i += 1, j += 1
  4. 否则:饼干太小,只能换更大的饼干,j += 1

代码

classSolution:deffindContentChildren(self,g:List[int],s:List[int])->int:# 让“最小胃口”优先配“最小能满足它的饼干”g.sort()s.sort()i=0# 孩子指针:当前要满足的孩子j=0# 饼干指针:当前可用的最小饼干count=0whilei<len(g)andj<len(s):# 当前饼干能满足当前孩子:成功分配ifg[i]<=s[j]:i+=1j+=1count+=1else:# 饼干太小,无法满足任何“更大胃口”的孩子# 只能丢掉这块饼干,换下一块更大的j+=1returncount

只要“孩子还没分完”并且“饼干还没用完”,分配就有意义。少一个都不行。
所以必须是:

whilei<len(g)andj<len(s):
项目复杂度说明
时间复杂度O(n log n + m log m)两次排序(n=len(g),m=len(s))+ 一次双指针扫描
空间复杂度O(1)(不算排序)只用常数变量;若语言排序用额外空间则取决于实现

376. 摆动序列

目标:
给你一个整数数组nums,找一个最长子序列,满足:

  • 相邻差值正负交替
    nums=[1,7,4,9,2,5]diff=[+6,-3,+5,-7,+3]✅ 全程交替 答案=6
  • 子序列不要求连续(可以跳着选)

👉 返回这个最长长度。

核心思路(贪心)

我们只关心“方向有没有变”,不关心数值具体多大。
只要方向变了,就一定能多摆一下。

我们同时维护两种“结尾状态”

状态意味着什么
up当前这条序列最后一步是上升
down当前这条序列最后一步是下降

我们在贪:尽可能多地制造“方向切换”

只在方向发生改变的时候更新:

如果今天比昨天高: 说明出现“上升” 那我可以接在“下降”后面 → up = down + 1 如果今天比昨天低: 说明出现“下降” 那我可以接在“上升”后面 → down = up + 1

⚠️ 如果相等:

  • 没有方向
  • 对摆动没帮助
  • 直接忽略

代码

classSolution:defwiggleMaxLength(self,nums:List[int])->int:# 边界情况:0 或 1 个数iflen(nums)<2:returnlen(nums)# up: 以“上升”结尾的最长摆动子序列长度# down: 以“下降”结尾的最长摆动子序列长度up=down=1foriinrange(1,len(nums)):ifnums[i]>nums[i-1]:# 当前是上升 → 可以接在“下降”后面up=down+1elifnums[i]<nums[i-1]:# 当前是下降 → 可以接在“上升”后面down=up+1else:# 相等则忽略(不会形成摆动)continuereturnmax(up,down)
项目复杂度说明
时间复杂度O(n)一次遍历
空间复杂度O(1)只用两个变量

53. 最大子序和

目标:
给你一个整数数组nums,找一个连续子数组(必须连续),使它的和最大,返回这个最大和。

nums=[-2,1,-3,4,-1,2,1,-5,4]最大子数组=[4,-1,2,1]答案=6

核心思路(Kadane)

要么把当前数接在“之前的好子数组”后面,要么从当前数重新开始。

一段连续子数组,只要“前面已经亏钱了”,后面不管赚多少,都不该带着它

为什么这是“贪心且不会后悔”?

因为有一个铁律:

任何负的前缀,都只会拖后腿,
不可能让后面的子数组变得更大。

所以:

  • 丢掉负前缀 = 永远正确
  • 不存在“先忍着亏,后面赚更多”的情况

现在数组里的每个数可以想成:

  • 正数:赚钱
  • 负数:亏钱

你要找一段连续时间里赚得最多。

关键问题只有一个
当前这一刻,我是继续之前的这段“投资”,还是重新开一个新的?

情况 1:之前是正的

之前赚了+5现在来一个+3

👉 当然要接上
总收益 = 8(更大)

情况 2:之前是负的

之前亏了-5现在来一个+3

👉 立刻丢掉之前的
只要 +3 比 -2 好

所以我们维护两个量就够了:

  • cur_sum以当前位置结尾的最大子数组和
  • max_sum:目前为止见过的全局最大子数组和

代码

classSolution:defmaxSubArray(self,nums:List[int])->int:# cur_sum:以当前元素结尾的最大子数组和cur_sum=nums[0]# max_sum:目前为止见过的最大子数组和max_sum=nums[0]foriinrange(1,len(nums)):# 核心贪心:要不要之前那段?# 如果之前是负的,直接丢掉,从 nums[i] 重新开始cur_sum=max(nums[i],cur_sum+nums[i])# 更新全局最大值max_sum=max(max_sum,cur_sum)returnmax_sum
项目复杂度说明
时间复杂度O(n)一次遍历
空间复杂度O(1)只用常数变量
http://www.jsqmd.com/news/341179/

相关文章:

  • 2026年 销售管理软件厂家推荐排行榜,制造业/工厂/外贸/内贸/渠道多场景覆盖,智能绩效看板与客户流失预警系统深度解析 - 品牌企业推荐师(官方)
  • Mac 扩展坞(Dock)总是跑到副屏?一个非常有效的解决方法记录
  • 2026年猫粮品牌推荐:居家喂养场景深度评测,解决营养与适口性痛点并附购买排名 - 品牌推荐
  • 内网环境下,html5如何支持大文件的分块上传?
  • 怎么才能系统的学好学透网络安全?学到后面感觉东西越来越多
  • vue框架如何处理内网大文件的目录结构上传?
  • 2026年政府食堂承包靠谱企业排名,快来了解 - mypinpai
  • 2026年上海靠谱的医疗空间专业装修团队排名,前十名有哪些? - 工业推荐榜
  • 深度测评10个降AIGC工具 千笔AI助你轻松降AI率
  • 2026年北京婚礼策划公司推荐:五大场景深度评价与避坑指南排名 - 品牌推荐
  • 分析2026年宁波好用的洁净板漆面修复服务,靠谱修复服务怎么选 - myqiye
  • 使用vue3如何实现内网大文件的秒传和续传?
  • Meta 开源王炸!SAM 3D 正式发布!任何照片、视频都能秒变真实 3D,这个 AI 太离谱了!
  • 初二名著导读怎么练?2026年同步练习册评测来袭,英语阅读教辅/暑假练习册/期末冲刺卷,同步练习册直销厂家怎么选 - 品牌推荐师
  • 2026年 仓库管理软件推荐排行榜:ERP系统、数据分析、库存台账,智能工厂仓储解决方案深度解析与选购指南 - 品牌企业推荐师(官方)
  • 2026年江苏木制包装箱制造商排名,哪家口碑好值得推荐 - 工业品网
  • Wi-Fi PEAP
  • 江苏实木箱包装定制服务多少钱,靠谱的木箱包装厂家有哪些 - 工业推荐榜
  • 2026年 生产管理软件厂家推荐排行榜,RP/BOM/生产计划/机械加工/非标行业/精益生产/项目管理/物料追踪/质量控制/设备维护,智能工厂数字化解决方案精选 - 品牌企业推荐师(官方)
  • 温州洁净板喷漆修复优质公司个品牌靠谱 - myqiye
  • 测试用例设计 - 场景法
  • 国际搬家公司如何选择,程锦国际售后完善咨询电话了解下 - 工业设备
  • 用 ESP32-C3 直接连 Starlink 路由器/热点并完成配网
  • 科研党收藏!一键生成论文工具 千笔·专业学术智能体 VS 知文AI,MBA写作首选
  • 小型婚礼如何避坑?2026年北京婚礼策划公司推荐与排名,针对服务缩水与创意雷同痛点 - 品牌推荐
  • 用过才敢说 10个AI论文网站测评!本科生毕业论文写作必备工具推荐
  • 2026年北京婚礼策划公司推荐:个性化定制趋势排名,涵盖户外与中式场景资源整合痛点 - 品牌推荐
  • 2026年常州木制包装箱定制制造厂技术强的Top10 - 工业品网
  • 婚礼策划哪家执行强?2026年北京婚礼策划公司推荐与评价,解决设计图与现场不符痛点 - 品牌推荐
  • 2026年知名的新能源修剪机/园林修剪机厂家推荐及选购指南 - 品牌宣传支持者