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

LeetCode - 53. 最大子数组和

目录

题目

Kadane 算法核心思想

Kadane 算法的步骤分析

读者可能的错误写法

正确的写法


题目

53. 最大子数组和 - 力扣(LeetCode)

Kadane 算法核心思想

定义状态变量:

  • currentSum: 表示以当前元素为结束的子数组的最大和。
  • maxSum: 记录全局最大子数组和。

动态规划转移方程:

对于数组中的每个元素 nums[i]:

  • 如果 currentSum + nums[i] > nums[i],则将当前元素加到之前的子数组中(即扩展子数组)。
  • 如果 currentSum + nums[i] <= nums[i],则重新开始一个新的子数组,从 nums[i] 开始。
  • 转移方程: currentSum = max(currentSum + nums[i], nums[i])

更新全局最大值:

  • 在每一步计算中,比较 currentSum 和 maxSum,更新全局最大值: maxSum = max(maxSum, currentSum)

时间复杂度:

  • 遍历一次数组,时间复杂度为 O(n)。
  • 空间复杂度为 O(1),只需常量空间记录 currentSum 和 maxSum。

Kadane 算法的步骤分析

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]

最终结果:maxSum = 6,对应子数组 [4, -1, 2, 1]。 

读者可能的错误写法

class Solution {
public:int maxSubArray(vector<int>& nums) {int currenSum = 0;int maxSum = 0;for(int i =0;i<nums.size();i++){currenSum += nums[i];if(nums[i] > maxSum){maxSum = nums[i];}}return currenSum;}
};

逻辑错误:这个的代码没有正确实现Kadane算法。你只是在累加所有元素(currenSum                 += nums[i]),这计算的是整个数组的和,而不是最大子数组和。

maxSum初始化错误:应该初始化为数组的第一个元素,而不是0(因为数组可能全为负数)。

比较错误:你在比较nums[i]和maxSum,但应该比较currenSum和maxSum。

没有实现核心逻辑:没有实现"选择继续当前子数组还是开始新子数组"的逻辑。

你在最后返回的是currenSum而不是maxSum:currenSum是以最后一个元素结尾的子数组的最大和,但这不一定是整个数组中的最大子数组和。

正确的返回值应该是maxSum,因为它记录了遍历过程中找到的全局最大子数组和。

正确的写法

class Solution {
public:int maxSubArray(vector<int>& nums) {int currenSum = nums[0];int maxSum = nums[0];for(int i =1;i<nums.size();i++){currenSum = max(currenSum+nums[i],nums[i]);maxSum = max(maxSum,currenSum);}return maxSum;}
};
http://www.xdnf.cn/news/12920.html

相关文章:

  • 【每日一题 | 2025年6.2 ~ 6.8】第16届蓝桥杯部分偏简单题
  • 大数据治理的常见方式
  • Unity VR/MR开发-VR/开发SDK选型对比分析
  • 20-Oracle 23 ai free Database Sharding-特性验证
  • 求解插值多项式及其余项表达式
  • 阿里云OSS 上传文件 Python版本
  • Xxl-job——源码设计思考
  • 2025年6月6日第一轮
  • 基于算法竞赛的c++编程(20)函数的递归
  • Spring Security深度解析:构建企业级安全框架
  • 港科大快手提出统一上下文视频编辑 UNIC,各种视频编辑任务一网打尽,还可进行多项任务组合!
  • MQTT协议详解技术文档
  • 微服务架构实战:Nacos 单机版的安装与启动流程
  • 号外!PLC和安川伺服,通过Profinet转EtherCAT网关同步多个工作站的运动
  • 坚持每日Codeforces三题挑战:Day 4 - 题目详解(2025-06-07,难度:1000, 1100, 1400)
  • 转行数据分析师,愿望是进大厂
  • 构建智能对话式BI的关键:ChatBI场景下的Agent框架选型深
  • 沉金电路板表面处理工艺深度解析:技术原理与行业应用挑战
  • 滴滴 服务端 面经
  • 应急响应思路
  • 大数据(1) 大数据概述
  • 如何评估大语言模型效果
  • 【超详细】英伟达Jetson Orin NX-YOLOv8配置与TensorRT测试
  • Cilium动手实验室: 精通之旅---11.Advanced BGP Features - Lab
  • PCDF (Progressive Continuous Discrimination Filter)模块构建
  • 在Mathematica中使用Newton-Raphson迭代绘制一个花脸
  • oracle 归档日志与RECOVERY_FILE_DEST 视图
  • C++与Python编程体验的多维对比:从语法哲学到工程实践
  • skynet sproto 协议插件
  • 《Python批量删除阿里云OSS文件:多线程删除与关键词过滤全解析》