53. 最大子序和

思路1: 暴力 时间复杂度 n(n+1)/2 => 总体时间复杂度: O(n^2)
假设 i 表示窗口的起始点, 然后计算每个以 i 起始点的每个窗口大小(从1,2,3...N)的和, 进而求出其中窗口最大和

思路2: 动态规划 时间复杂度: O(N)
状态: f[n] 表示 以第n个数为结尾的子窗口的最大和

状态转移方程:
f[n] = max(f[n-1] + nums[n], nums[n])

因为当 f[n-1]] > 0时, 说明为增益效果。 所以此时以n为结尾的最大连续区间和就是 f[n-1] + nums[n]
而当 f[n-1] < 0 时, 说明为负增益效果。 所以此时以n为结尾的最大连续区间和就是 nums[n]

思路3: 贪心算法 时间复杂度: O(N)
从左到右迭代累加计算以 i 为结尾的连续窗口的和sum, 如果sum < 0, 舍弃前面部分, 直接重新计算窗口和sum
展开
李白的手机于2021-06-25 04:27发布的图片
李白的手机于2021-06-25 04:27发布的图片
李白的手机于2021-06-25 04:27发布的图片
李白的手机于2021-06-25 04:27发布的图片
评论