前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 53题 最大子序和 -- JavaScript

LeetCode 53题 最大子序和 -- JavaScript

作者头像
IT人一直在路上
发布2019-09-18 10:48:32
3150
发布2019-09-18 10:48:32
举报
文章被收录于专栏:前端重点笔记

解题思路分析:

该题是在一个整数数组中找到一个和最大的连续子数组,并返回和值。那么如何找到一个和最大的连续子数组呢?我们知道,这肯定需要遍历数组才行;好,那我们就开始遍历数组。首先,我们初始化最大和 sum 和当前和 currSum,对于 currSum,如果它小于0,我们就将数组中下一值赋给它;否则就将数组中下一值与其相加。然后,我们取当前 sum 和 currSum 的最大值即可。

代码实现:

代码语言:javascript
复制
var maxSubArray = function(nums) {
  //首先判断nums是否非空
  if(nums){
    //初始化最大和sum、当前和currSum
    var sum = nums[0];
    var currSum = nums[0];
    for (var i = 1; i < nums.length; i++) {
      //取得当前和currSum
      currSum = currSum < 0 ? nums[i] : currSum + nums[i];
      //取得最大和sum
      sum = Math.max(currSum,sum)
    }
    return sum;
  }
};

执行步骤分析:

我们以输入数组 nums = [-2,1,-3,4,-1,2,1,-5,4] 为例,分析一下执行流程:

初始化:currSum = -2,sum = -2, nums[1]:因为 currSum = -2 < 0,故 currSum = nums[1] = 1;sum = Math.max(1,-2) = 1, nums[2]:因为 currSum = 1 > 0,故 currSum = currSum + nums[2] = -2;sum = Math.max(-2,1) = 1, nums[3]:因为 currSum = -2 < 0,故 currSum = nums[3] = 4;sum = Math.max(4,1) = 4, nums[4]:因为 currSum = 4 > 0,故 currSum = currSum + nums[4] = 3;sum = Math.max(3,4) = 4, nums[5]:因为 currSum = 3 > 0,故 currSum = currSum + nums[5] = 5;sum = Math.max(5,4) = 5, nums[6]:因为 currSum = 5 > 0,故 currSum = currSum + nums[6] = 6;sum = Math.max(6,5) = 6, nums[7]:因为 currSum = 6 > 0,故 currSum = currSum + nums[7] = 1;sum = Math.max(1,6) = 6, nums[8]:因为 currSum = 1 > 0,故 currSum = currSum + nums[8] = 5;sum = Math.max(5,6) = 6, 循环结束,最终返回 sum = 6 通过以上执行流程的分析,应该比较清晰了。一句话概括,我们利用 currSum 是为了保证子数组连续,而sum 中保存的值,就是最大连续子数组的和。

该算法的时间复杂度为:O(n)

该算法的空间复杂度为:O(1)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-03-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档