Leetcode 53. 最大子数组和

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

 

 

思路1 贪心:

1. 创建两个变量,一个存储遍历过程中最大子数组和historyMax,一个存储前面元素的子数组和preMax 。

2. 为这两个值historyMax和preMax赋予int的最小值。

3.对nums进行遍历,如果preMax < 0,则抛弃这个preMax 值,用当前元素的值作为preMax 新的值。 如果preMax > 0, 则把当前元素加到preMax 上,在和historyMax进行比较,historyMax等于两者中大的值。

4.返回historyMax的值。

import "math"

func maxSubArray(nums []int) int {

	preMax := math.MinInt
	historyMax := math.MinInt
	for _, item := range nums {
		if preMax < 0 {
			preMax = item
		} else {
			preMax += item
		}
		historyMax = Max(preMax, historyMax)
	}
	return historyMax
}

func Max(x, y int) int {
	if x > y {
		return x
	}
	return y
}

 

思路2 动态规划:

1.对需求进行拆分,分别计算每一个位置的子数组和

2.返回最大的子数组和

 

import "math"

func maxSubArray(nums []int) int {
	preNum := 0
	for i, _ := range nums {
		if preNum > 0 {
			nums[i] += preNum
		}
		preNum = nums[i]
	}
	maxNum := math.MinInt
	for _, item := range nums {
		if item > maxNum {
			maxNum = item
		}
	}
	return maxNum
}

 

posted @ 2022-04-21 14:59  SoutherLea  阅读(13)  评论(0编辑  收藏  举报