LeetCode 53. 最大子序和
Posted Zoey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 53. 最大子序和相关的知识,希望对你有一定的参考价值。
最大子序列和
题目大意:
给一个数组,求出最大子序列和(连续数的和最大)
例子
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
1、动态规划
如果按动态规划的做法,我们已知的条件:
- 前 n-1 个数最大的子序列和 ans
- num[n] 的值
我们还差一个条件:包括num[n-1]的连续值的最大值 sum
样例中前缀和(sum)的值
前缀和小于0则默认为0,最后面的值不会有任何帮助
0 | 0 | 0 | 4 | -3 | 5 | 6 | 1 | 5 |
---|
最终 ans = max(ans, sum + num[i]);
代码
复杂度:O(n)
class Solution {
public int maxSubArray(int[] nums) {
int len = nums.length;
int sum = 0; // 前缀和
int ans = nums[0]; //最大值
for(int i = 0; i < len; i++) {
ans = Math.max(ans, sum + nums[i]);
sum = sum + nums[i];
if(sum < 0) sum = 0;
}
return ans;
}
}
以上是关于LeetCode 53. 最大子序和的主要内容,如果未能解决你的问题,请参考以下文章