LeetCode 53 最大子数组和:原来动态规划可以这么简单
LeetCode 53 最大子数组和原来动态规划可以这么简单最近刷到 LeetCode 53《最大子数组和》一开始看到“动态规划”几个字还有点发怵总觉得要背公式、画状态表。结果真正理解之后发现这道题其实非常符合人的直觉。核心思想只有一句话当前数字要不要和前面那段连续子数组接在一起理解了这句话代码几乎就自己出来了。题目描述给定一个整数数组nums找出一个具有最大和的连续子数组并返回其最大和。示例nums[-2,1,-3,4,-1,2,1,-5,4]输出6因为连续子数组[4,-1,2,1]的和最大4(-1)216先别想动态规划先站在一个普通人的角度思考。假设你已经走到了某个数字面前。比如来到数字4这时候你有两个选择方案一接上前面的连续子数组例如前面已经累计出了3那么现在可以变成347方案二不要前面的了直接从当前数字重新开始4那应该怎么选答案非常简单哪个大就选哪个。如果前面的累计和是正数就带上。如果前面的累计和已经是负数就直接扔掉。因为负数只会拖后腿。用示例一步一步走题目[-2,1,-3,4,-1,2,1,-5,4]我们准备两个变量当前和 历史最大和第1个数字-2当前和-2历史最大-2第2个数字1现在问自己带上前面的好还是重新开始-21-11显然1-1所以直接不要前面的。当前和1历史最大1第3个数字-3继续思考1(-3)-2-3选大的-2当前和-2历史最大1第4个数字4继续判断-2424显然42直接重新开始。当前和4历史最大4第5个数字-1判断4(-1)3-1选3当前和3历史最大4第6个数字2判断3252选5历史最大更新5第7个数字1判断5161选6历史最大更新6第8个数字-5判断6(-5)1-5选1历史最大仍然6第9个数字4判断1454选5历史最大依旧6最终答案6对应连续子数组[4,-1,2,1]代码为什么这样写完整代码fromtypingimportListclassSolution:defmaxSubArray(self,nums:List[int])-int:pre0max_sumfloat(-inf)fornuminnums:premax(prenum,num)max_summax(max_sum,pre)returnmax_sumpre 表示什么pre表示以当前数字结尾时最大的连续子数组和。比如来到数字4pre6说明某个连续子数组...4结尾是当前数字并且和最大。为什么是premax(prenum,num)因为只有两种选择接上前面prenum从当前数字重新开始num选大的那个premax(prenum,num)这就是整道题的核心。max_sum 干什么max_sum负责记录历史最好成绩。因为pre只代表当前数字结尾的情况。而答案可能出现在任何位置。所以需要一个变量全程记录max_summax(max_sum,pre)全负数为什么也能正确处理例如[-3,-1,-2]过程当前-3最大-3当前-1最大-1当前-2最大-1最终返回-1正确答案正是[-1]这道题为什么属于动态规划动态规划的本质其实就一句话当前结果依赖前一步结果。这里当前的pre依赖上一轮的pre因为premax(prenum,num)里面直接用了上一轮计算出来的结果。所以它符合动态规划的思想。为什么很多人说它还有贪心思想因为每一步都在做局部最优选择带前面的 还是重新开始直接选更大的那个。这种“当前先选最优”的思路又带有明显的贪心特点。所以很多面试官会说Kadane 算法本质是动态规划但理解起来更像贪心。Kadane 算法到底记什么其实不用死记公式。记住下面这句话就够了前面的连续和如果是正数就带上如果已经变成负数就直接扔掉从当前数字重新开始。代码里对应的就是premax(prenum,num)总结这道题最容易让人误以为很复杂但实际上思路非常朴素。整个过程只做两件事判断当前数字是接在前面后面还是重新开始顺便记录全程出现过的最大和。最终只需要遍历一次数组。时间复杂度O(n)空间复杂度O(1)这就是经典的 Kadane 算法也是很多动态规划题目的入门模板。如果一句话概括每走到一个数字面前都问自己带上前面更赚还是从这里重新开始更赚。

相关新闻

THREE.MeshLine技术深度解析:突破WebGL线条渲染限制的网格化解决方案

THREE.MeshLine技术深度解析:突破WebGL线条渲染限制的网格化解决方案

THREE.MeshLine技术深度解析:突破WebGL线条渲染限制的网格化解决方案 【免费下载链接】THREE.MeshLine Mesh replacement for THREE.Line 项目地址: https://gitcode.com/gh_mirrors/th/THREE.MeshLine 在WebGL的3D渲染世界中,线条渲染一直是开发…

2026/6/19 7:30:40阅读更多 →
3步解锁JetBrains智能编程伙伴:从零开始掌握Continue插件

3步解锁JetBrains智能编程伙伴:从零开始掌握Continue插件

3步解锁JetBrains智能编程伙伴:从零开始掌握Continue插件 【免费下载链接】continue open-source coding agent 项目地址: https://gitcode.com/GitHub_Trending/co/continue 你是否厌倦了在代码编写和文档查阅之间频繁切换?Continue作为开源编码…

2026/6/19 7:30:40阅读更多 →
Chatbox CE技术架构深度解析:多模型AI客户端的模块化设计与实战应用

Chatbox CE技术架构深度解析:多模型AI客户端的模块化设计与实战应用

Chatbox CE技术架构深度解析:多模型AI客户端的模块化设计与实战应用 【免费下载链接】chatbox Powerful AI Client 项目地址: https://gitcode.com/GitHub_Trending/ch/chatbox 为什么选择Chatbox CE作为你的AI开发工具箱?在AI应用遍地开花的今天…

2026/6/19 7:25:40阅读更多 →
OpenClaw:本地AI工作流的个人操作系统实践指南

OpenClaw:本地AI工作流的个人操作系统实践指南

1. 为什么是OpenClaw?——本地AI工作流的“操作系统级”觉醒你有没有过这种体验:深夜三点,对着一个刚写完的Python脚本发呆,心里盘算着——如果它能自己读取我的邮箱、解析会议邀请、自动更新日历、再顺手把待办事项同步到Notion&…

2026/6/19 8:40:46阅读更多 →
Qwen3.7-Plus多模态智能体实战:终端感知与跨语言代码执行

Qwen3.7-Plus多模态智能体实战:终端感知与跨语言代码执行

1. 项目概述:一场没有官方背书的“越级挑战”,我们到底在测什么? 最近刷到一条标题特别扎眼的消息:“Qwen3.7-Plus 实测,79分干翻了GPT-5.4”。说实话,我点进去第一反应不是兴奋,而是皱眉——因…

2026/6/19 8:40:46阅读更多 →
JetBrains IDE试用期重置终极指南:3种方法免费解锁专业开发工具

JetBrains IDE试用期重置终极指南:3种方法免费解锁专业开发工具

JetBrains IDE试用期重置终极指南:3种方法免费解锁专业开发工具 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否曾因JetBrains IDE试用期结束而中断开发工作?ide-eval-resetter正是解…

2026/6/19 8:40:46阅读更多 →
嵌入式开发必读:如何高效利用Microchip全球技术支持网络

嵌入式开发必读:如何高效利用Microchip全球技术支持网络

1. 为什么需要了解一家芯片公司的全球网络?如果你是一名嵌入式工程师、硬件开发者或者采购,在选择一颗微控制器(MCU)、模拟芯片或存储器件时,除了看数据手册、评估开发板,还有一个至关重要的环节常常被新手…

2026/6/19 8:40:46阅读更多 →
如何让本地大模型拥有实时搜索能力?LLM_Web_search终极使用指南

如何让本地大模型拥有实时搜索能力?LLM_Web_search终极使用指南

如何让本地大模型拥有实时搜索能力?LLM_Web_search终极使用指南 【免费下载链接】LLM_Web_search An extension for oobabooga/text-generation-webui that enables the LLM to search the web 项目地址: https://gitcode.com/gh_mirrors/ll/LLM_Web_search …

2026/6/19 8:40:46阅读更多 →
Ollama本地部署调优与工作流集成实战指南

Ollama本地部署调优与工作流集成实战指南

1. 为什么本地跑大模型这件事,现在比去年难十倍也重要十倍 去年装 Ollama,基本就是 curl -fsSL https://ollama.com/install.sh | sh 一行命令完事,喝杯咖啡回来, ollama run llama3 就能对着终端聊上半小时。今年&#xff1f…

2026/6/19 8:35:45阅读更多 →
Photobucket付费墙背后:5美元买童年回忆却落得一场空!

Photobucket付费墙背后:5美元买童年回忆却落得一场空!

1. 付费墙初现如今身处万亿市值公司林立的时代,我们也不能轻易放弃5美元。就像Photobucket,它曾相当于过去的Imgur,我们小时候常把图片上传到这个网站,然后在各种论坛上分享链接,它简单好用,尽职尽责。但最…

2026/6/19 0:04:37阅读更多 →
如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南

如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南

如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live…

2026/6/19 0:04:37阅读更多 →
yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南

yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南

yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南 【免费下载链接】yuzu 项目地址: https://gitcode.com/GitHub_Trending/yuz/yuzu yuzu作为目前最流行的开源Nintendo Switch模拟器,不仅提供了完整的游戏运行环境,还内…

2026/6/19 0:04:37阅读更多 →