53.最大子序和
53.最大子序和
给定一个整数数组 nums
,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例 1:
1 | 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] |
每加入一个元素进入子序中,都需要判断其和
Solution1:动态规划
问题的关键在于 nums[i]
到底是单独成为一段,还是加入到f{i-1}
对应的那一段中去
这取决于nums[i]
和f{i-1}+nums[i]
的大小,如果前者比后者大,那么就是单独成为一段
f{i}
只与f{i-1}
有关,所以用一个变量pre
来维护当前f{i}
的f{i-1}
的值
精髓在于 pre = Math.max(pre + x, x);
,如果当前元素x
本身比之前的累加和(包括x
)还大,那么就从当前元素重新开始计数,这个思想是这道题的key
1 | class Solution { |