LeetCode 0053 Maximum Subarray
作者:互联网
1. 题目描述
2. Solution
1、思路分析
dynamic programming
a> 状态定义,f(i) 以nums[i]结尾的最大连续子序列和
b> 状态转移方程,f(i) = max{f(i - 1) + nums[i] , nums[i]}
c> 边界,f(0) = nums[0]
用变量 curSum 替代 f(i - 1),res 替代 f(i) 以降低空间复杂度
2、代码实现
package Q0099.Q0053MaximumSubarray;
public class Solution {
/*
dynamic programming
1. 状态转移方程: f(i) = max{f(i - 1) + nums[i] , nums[i]}
用变量 curSum 替代 f(i - 1),res 替代 f(i) 以降低空间复杂度
2. 初始状态: curSum = 0, res = nums[0]
*/
public int maxSubArray(int[] nums) {
// dynamic programming
int res = nums[0];
int curSum = 0;
for (int num : nums) {
// if (curSum > 0) curSum += num;
// else curSum = num;
curSum = Math.max(curSum + num, num);
res = Math.max(res, curSum);
}
return res;
}
}
3、复杂度分析
时间复杂度: O(n)
空间复杂度: O(1)
标签:nums,0053,curSum,复杂度,int,num,res,Subarray,LeetCode 来源: https://www.cnblogs.com/junstat/p/16095095.html