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
}

浙公网安备 33010602011771号