其他分享
首页 > 其他分享> > LeetCode 0053 Maximum Subarray

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