1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// @Title: 最大子序和 (Maximum Subarray)
// @Author: 15816537946@163.com
// @Date: 2020-06-25 07:15:36
// @Runtime: 8 ms
// @Memory: 3.3 MB
/*
 * @lc app=leetcode.cn id=53 lang=golang
 *
 * [53] 最大子序和
 *
 * https://leetcode-cn.com/problems/maximum-subarray/description/
 *
 * algorithms
 * Easy (47.37%)
 * Likes:    1191
 * Dislikes: 0
 * Total Accepted:    94.2K
 * Total Submissions: 198.8K
 * Testcase Example:  '[-2,1,-3,4,-1,2,1,-5,4]'
 *
 * 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
 *
 * 示例:
 *
 * 输入: [-2,1,-3,4,-1,2,1,-5,4],
 * 输出: 6
 * 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
 *
 *
 * 进阶:
 *
 * 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。
 *
 */

func maxSubArray(nums []int) int {
	maxSum, lastSum := nums[0], 0
	for i := range nums {
		if lastSum > 0 {
			lastSum += nums[i]
		} else {
			lastSum = nums[i]
		}

		if maxSum < lastSum {
			maxSum = lastSum
		}
	}

	return maxSum
}