python hot 100——4 动态规划

发布时间:2026/10/6 10:26:45

python hot 100——4 动态规划 53. 最大子数组和1. 题目要求给你一个整数数组nums找出和最大的连续子数组返回这个子数组的元素和。例如输入nums [-2,1,-3,4,-1,2,1,-5,4]输出6和最大的连续子数组是 [4,-1,2,1]它的和为4 (-1) 2 1 62. 整体思路定义数组f[i]表示必须以nums[i]结尾的最大子数组和。对于当前数字nums[i]有两种情况接在前面的子数组后面。不要前面的部分从当前数字重新开始。状态转移公式f[i] max(f[i - 1], 0) nums[i]如果f[i-1]大于0保留前面的子数组。小于0前面的部分会拖累结果直接丢掉。初始条件f[0] nums[0]最终答案max(f)因为最大子数组不一定以最后一个数字结尾。✏️ 示例nums [-2, 1, -3, 4, -1, 2, 1, -5, 4]inums[i]f[i]0-2-21112-3-23444-135256167-51845f中的最大值是6。3. ✅ 可以直接运行的完整程序class Solution(object): def maxSubArray(self, nums): nlen(nums) f [0] * n f[0] nums[0] for i in range(1, n): f[i] max(f[i - 1], 0) nums[i] return max(f) text raw_input(请输入数组) nums map(int, text.split()) solution Solution() answer solution.maxSubArray(nums) print 最大子数组和是, answer4. 超详细代码逐行讲解class Solution(object): def maxSubArray(self, nums): nlen(nums) f [0] * n # 创建和nums长度相同的动态规划数组 #初始状态 f[0] nums[0] # 以第一个数字结尾时只能选择第一个数字 for i in range(1, n): # 遍历数组下标从1到最后 #状态转移方程 f[i] max(f[i - 1], 0) nums[i] # 如果前面的和大于0就保留前面的部分 # 如果前面的和小于0就从当前数字重新开始 return max(f) # 返回f数组中的最大值核心状态转移方程f[i] max(f[i - 1], 0) nums[i]例如当前数字是4前面的最大和是-2f[i] max(-2, 0) 4 0 4 4前面的和是负数所以从4重新开始。①为什么不能for i in f:for i in f:这里的i是f中的元素值不是下标。这道题需要通过下标访问f[i - 1] # 前一个状态 nums[i] # 当前数字 f[i] # 保存当前状态5. 本题用到的 Python 基础知识总结知识点用法解释列表f [0] * len(nums)创建指定长度的列表列表长度len(nums)获得数组长度for循环for i in range(1,n)从1到n-1遍历rangerange(a, b)从a开始到b-1结束左闭右开6. 易错点提醒易错点原因正确做法f[0]初始化为0子数组不能为空f[0] nums[0]循环从0开始会访问f[-1]从i 1开始返回f[-1]最大子数组不一定以最后一个数字结尾返回max(f)把子数组当成子序列子数组中的元素必须连续只能与前一个状态拼接前面的和为负数还保留负数会拖累当前结果使用max(f[i-1], 0)答案初始化为0数组可能全部是负数使用f[0] nums[0]
延伸阅读

更多相关文章

2026/10/6 8:34:41

Python爬虫工具指南:从Requests到Playwright,如何做出最优选?

于爬虫生态领域里, 工具的挑选可不是单纯的“哪个流行便用哪个”这般简单, 而是成为了一项必须要综合考量目标复杂度、数据规模、反爬强度以及维护成本的架构方面的决策, 面对从静态页面再到高度灵动变化的Web应用, 开发者常常会陷入到工具选择的那种困惑之中, 本文会从协议层级…

2026/9/27 11:41:48

HP打印机连接方式全解析:有线与无线配置指南

1. 打印机连接方式概述 在现代办公环境中,HP打印机作为主流办公设备之一,提供了多种连接方式以满足不同场景下的打印需求。作为一名IT技术支持人员,我经常需要为不同规模的办公环境配置打印机,发现很多用户对打印机的连接方式存在…

2026/9/29 17:08:36

欧洲卡航专线实时报价查询,教你3步拿到真实底价

网上搜的报价大多是引流价,真要发货的时候不是涨价就是有附加条件。其实查报价也是有技巧的,问对了问题,货代不敢随便报虚价。很多卖家反映,同样发100kg到德国,不同货代的报价从15元/kg到22元/kg不等,差距能…

2026/10/6 10:23:54

机箱前置USB供电不足怎么办?原理诊断与改造方案全解析

你有没有过这种经历:把移动硬盘插到机箱前面板的USB口,硬盘指示灯闪了两下,系统突然弹出一个“设备无法识别”的提示,或者Windows右下角冒出一个“集线器端口上的电涌”的警告。一开始我还以为是硬盘坏了,可同样一块硬…

2026/10/6 10:23:54

Ponytail协议:轻量级插件协同的事件总线规范

1. “Ponytail”不是发型,是开发者圈里正在悄悄流行的新一代插件协同协议最近两周,我在三个不同技术栈的项目组里,都听到了同一个词:ponytail。不是在美发沙龙,也不是在UI设计评审会上——而是在后端服务联调现场、前端…

2026/10/6 10:23:54

告别自建浏览器池:Ace Data Cloud 动态渲染与网页提取实战

1. 浏览器池这件事,为什么成了团队的隐形负担 做过数据采集或者网页内容提取的人,大概率都经历过这样一个阶段:一开始用 requests 加个 BeautifulSoup 就能搞定,后来发现页面是 JS 动态渲染的,于是换成 Selenium&a…

2026/10/6 10:23:54

高速PCB等长布线:Altium Designer蛇形走线实操全攻略

DDR3不跑等长,印象里第一版投板后读写时序偶发不稳定,排查了整整一周才把矛头指向那组地址线——两端相差了将近800mil。后来老老实实在Altium Designer里补蛇形走线,一次解决问题。这些年做高速PCB,蛇形走线几乎是绕不开的必修课…

2026/10/6 10:18:53

MOS管米勒平台全解析:从原理到波形实测,搞定炸机难题

好久没正经聊MOS管了。今天想聊的这话题,是我带新人时几乎每次都会被问到的坎——米勒平台。你说它难吗?原理上讲就是几个寄生电容在捣乱。你说它简单吗?不懂的人经常被炸机炸得一脸懵,明明电路看着好好的,一上电管子就…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/6 4:01:51

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/5 17:38:27

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 0:03:23

MR25H40CDF+STM32F031C6工业级高可靠数据存储方案

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的 PLC 控制柜里、在风电变流器的散热片背面、在矿井监测终端的金属外壳下,你经常能看到一块指甲盖大小的黑色芯片——它既不是 Flash,也不是…

2026/10/6 0:03:23

MRAM+STM32工业断电数据保全实战指南

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的PLC柜里、在野外无人值守的环境监测终端里、在高速运转的包装机控制板上,你经常能看到一块指甲盖大小的黑色芯片,旁边贴着“MR25H40CDF”丝…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑