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;
}
}