美文网首页
53. Maximum Subarray 最大子数组

53. Maximum Subarray 最大子数组

作者: sarto | 来源:发表于2022-04-06 22:41 被阅读0次

题目

给定一个数组 nums,找到一个连续子数组,其和最大,返回这个结果。

解析

从左往右遍历,我们分析一下数组的值变化情况

  1. 当遍历到一个正值的时候,这个值无论如何也是比当前值大的,直接更新当前最大值即可
  2. 当遍历到一个负值的时候,数组开始减小了,此时我们判断积累的值和上一个最大值哪个大,然后更新最大值。
  3. 如果累加值已经小于 0 了,那么再使用累加值和任意数相加都会更小,所以需要将累加值置空。

那么我们得到解体思路

  1. 一直累加 cur ,并更新最大值
  2. 一旦 cur 小于0,重置 cur 为 0

伪代码

for i < len
  cur+=nums[i]
  if cur < 0
    cur = 0

代码

func maxSubArray(nums []int) int {
    sum := -1<<63
    cur := 0
    for i:=0;i<len(nums);i++{
        cur +=nums[i]
        if cur > sum {
            sum = cur
        }
        if cur < 0 {
            cur = 0
        }
    }
    return sum
}

相关文章

网友评论

      本文标题:53. Maximum Subarray 最大子数组

      本文链接:https://www.haomeiwen.com/subject/qtedsrtx.html