53. Maximum Subarray

Easy
自己做出来的方法是O(N2),TLE了.
看了答案, 发现其实也是按照sum[i, j] = sum[0, j] - sum[0, i]这公式,去找sum[0, j] - sum[0, i]的最大值。我的一种错误思路是找sum[0, j]的最大值和sum[0, i]的最小值,然而有可能这样找出来可能j < i不符题意,或者是遍历两边去找最大差导致TLE.
答案说明你要找sum[i, j] 的最大值,完全可以动态去直接找,不用想当然地去找被减数的最大值和减数的最小值. 因为preSum完全可以一直记录,再记录一个minPreSum就行了,那么preSum - minPresum就等于maxSubSum了.

public class Solution {
    public int maxSubArray(int[] nums) {
        int maxSubSum = Integer.MIN_VALUE;
        int preSum = 0;
        int minPreSum = 0;
        //sum[i,j] = sum[0,j] - sum[0, i];
        for (int i = 0; i < nums.length; i++){
            preSum += nums[i];
            maxSubSum = Math.max(maxSubSum, preSum - minPreSum);
            minPreSum = Math.min(minPreSum, preSum);
        }
        return maxSubSum;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容