53 maximum subarray

https://leetcode.com/problems/maximum-subarray/

有意思的题 思路沿用了644 maximum average subarray II里计算max subarray和的方法

class Solution {
    public int maxSubArray(int[] nums) {
        if (nums.length == 1) 
            return nums[0];
        int[] prefixes = new int[nums.length];
        prefixes[0] = nums[0];
        int minPrefix = nums[0];
        int ans = nums[0];
        for (int i = 1; i < nums.length; i++) {
            prefixes[i] = prefixes[i - 1] + nums[i];
            ans = Math.max(ans, prefixes[i] - minPrefix);
            ans = Math.max(ans, prefixes[i]);
            minPrefix = Math.min(minPrefix, prefixes[i]);
        }
        return ans;
        
    }
}

或者你也可以当成dp来做,更简单

class Solution {
    public int maxSubArray(int[] nums) {
        if (nums.length == 1) 
            return nums[0];
        int[] dp = new int[nums.length];
        dp[0] = nums[0];
        int ans = nums[0];
        for (int i = 1;  i < dp.length; i++) {
            dp[i] = Math.max(dp[i - 1] + nums[i], nums[i]);
            ans = Math.max(dp[i], ans);
        }
        return ans;
        
    }
}

Last updated