【算法|LeetCode Golang Hot53-最大子数组和】https://leetcode-cn.com/problems/maximum-subarray/
贪心算法
package mainimport "fmt"func main() {
res := maxSubArray([]int{-3, -1, -5})
fmt.Println(res)
}func maxSubArray(nums []int) int {
if len(nums) == 0 {
return 0
}var max int
var current intvar negZeroNum int
var negZeroMax int
for i := 0;
i < len(nums);
i++ {
if nums[i] < 0 {
negZeroNum++
if negZeroNum == 1 {
negZeroMax = nums[i]
} else {
if nums[i] > negZeroMax {
negZeroMax = nums[i]
}
}
}
current += nums[i]
if current < 0 {
current = 0
}
if current > max {
max = current
}
}
if len(nums) == negZeroNum {
return negZeroMax
}
return max
}
动态规划
package mainimport "fmt"func main() {
res := maxSubArray([]int{-3, -1, -5, 3})
fmt.Println(res)
}func maxSubArray(nums []int) int {
if len(nums) == 1 {
return nums[0]
}
max := nums[0]
for i := 0;
i < len(nums);
i++ {
if i == 0 {
continue
}
if nums[i-1] > 0 {
nums[i] = nums[i] + nums[i-1]
}
if max < nums[i] {
max = nums[i]
}
}
return max
}
推荐阅读
- leetcode|leetcode 344.反转字符串(reverse string)C语言
- LeetCode 668. 乘法表中第k小的数
- 算法与数据结构|算法与数据结构——AcWing算法题常用代码模板
- 算法题-字符串3.17
- 算法-异或的应用
- dfs|数独游戏dfs
- ACM专题学习|Mayor‘s posters--线段树(区间修改)+离散化
- ACM专题学习|青蛙的约会--扩展欧几里得
- ACM专题学习|地毯--二维差分