Skip to content

Latest commit

 

History

History
31 lines (29 loc) · 1.05 KB

最大子序和.md

File metadata and controls

31 lines (29 loc) · 1.05 KB
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-subarray

解法
一个数组求最大和连续数组,想到的就是使用动态规划来解,针对这个问题,可以先声明两个值ans、sum,一个来保存答案,一个保存当前和,每次都比较,然后获得最大的即可。这里为什么要判断sum的正负呢?如果当前和大于0,直接加当前项即可,如果小于0,那么我也没有必要保存之前的和,因为加上当前项肯定比原先的值大
func MaxSubArray(nums []int) int {
	ans := nums[0]
	sum := 0
	for _, val := range nums {
		if sum > 0 {
			sum += val
		} else {
			sum = val
		}
		if ans < sum {
			ans = sum
		}
	}
	return ans
}
// 执行用时:4ms
// 内存消耗:3.3MB