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

最大连续子数组

class Solution {public int maxSubArray(int[] nums) {int len=nums.length;//创建dp表int[] dp=new int[len];//初始化dp[0]=nums[0];int max=dp[0];//根据状态转移方程填dp表for(int i=1;i<len;i++){dp[i]=Math.max(nums[i],nums[i]+dp[i-1]);max=Math.max(max,dp[i]);}return max;}
}

dp[i] 只是「以第 i 个数结尾」的最大连续子数组和,而题目要求的是 整个数组里「任意」连续子数组的最大和,这两者并不等价。


✅ 举个例子说明

nums = [-2, 1, -3, 4, -1, 2, 1]
inums[i]dp[i] (以 i 结尾的最大和)当前全局最大值
0-2-2-2
1111
2-3-21
3444
4-134
5255
6166 ✅
  • dp[6] = 6 表示「以最后一个元素 1 结尾」的最大连续子数组和是 [4, -1, 2, 1]
  • 但全局最大连续子数组和也是 6,恰好落在结尾,纯属巧合
  • 如果数组变成 [5, -10, 3],则:
    • dp = [5, -5, 3]
    • 而答案显然是 5,不是 dp[2] = 3

✅ 所以必须再扫一遍

int max = dp[0];
for (int i = 1; i < n; i++) {dp[i] = Math.max(nums[i], dp[i-1] + nums[i]);max   = Math.max(max, dp[i]);   // 这一步就是取“所有以 i 结尾的最大值”里的最大值
}

✅ 一句话总结

dp[i] 只保证「以 i 结尾」的最大连续子数组和;
题目要求的是「全局」最大连续子数组和,因此需要 max = Math.max(max, dp[i]) 把每一行的结果再取一次最大值。

http://www.dtcms.com/a/302326.html

相关文章:

  • Makefile if语句用法
  • 【传奇开心果系列】Flet纵向瀑布流本地图片布局排列自定义模板
  • 【硬件】LVGL
  • 15-C语言:第15天笔记
  • keepalived原理及实战部署
  • 【数据库】时序数据库选型指南:从大数据视角看IoTDB的核心优势
  • 张 LLama 多语言语义相似度计算全解析:不同语言 同义词的相似度计算
  • idea启动java应用报错
  • idea编译报错 java: 非法字符: ‘\ufeff‘ 解决方案
  • OSPF笔记
  • 实验-静态路由
  • 解决windows系统下 idea、CLion 控制台中文乱码问题
  • 应急响应处置案例(上)
  • python-并发编程
  • 移动高清盒子6PRO-河南创维E900V22D-晶晨S905L3B-4+16G-安卓9-线刷固件包
  • 提取excel中的年月日
  • uniapp_微信小程序_根据胶囊按钮计算出的导航栏高度为什么不是44px?
  • 多光谱相机助力第四次全国农业普查-农业用地调查
  • Deepseek + browser-use 轻松实现浏览器自动化
  • 关于大视频大文件诸如超过5个G或10个G的视频上传详解原理以及-5种语言实现-优雅草卓伊凡|深蓝
  • 【7.26-7.28胜算云AI日报:首个开源3D世界生成模型腾讯混元、微软预示 8 月 GPT-5 发布、Nemotron推理、商汤悟能、DM夺金】
  • UniappDay04
  • 开源B端生态掘金:从Odoo二次开发到行业专属模块的技术变现
  • 【uniapp】---- 使用 uniapp 实现视频和图片上传且都可以预览展示
  • NVMe高速传输之摆脱XDMA设计20:PCIe请求模块设计(上)
  • 【mysql慢查询】
  • “太赫兹”
  • Java学习-----如何创建线程
  • 【科普】STM32CubeMX是配置工具,STM32CubeIDE是集成开发环境,二者互补但定位不同,前者负责初始化配置,后者专注代码开发调试。
  • DDD领域驱动中瘦模型与富态模型的核心区别