Given an array of integers, find the continuous subarray with smallest sum.
Return the sum of the subarray.
Example
Example 1
Input:[1, -1, -2, 1]
Output:-3
Example 2
Input:[1, -1, -2, 1, -4]
Output:-6
Notice
The subarray should contain one integer at least.
思路:参考Maximum SubArray, 利用公式:Sum[i,j] = Prefix[j+1] - Prefix[i], 要Sum[i,j] 最小,那么Prefix[i] 就求最大即可。
public class Solution {
/*
* @param nums: a list of integers
* @return: A integer indicate the sum of minimum subarray
*/
public int minSubArray(List<Integer> nums) {
int prefixSum = 0;
int curSum = 0;
int minSum = Integer.MAX_VALUE;
int maxSum = 0;
for(int i=0; i<nums.size(); i++) {
prefixSum += nums.get(i);
minSum = Math.min(minSum, prefixSum - maxSum);
maxSum = Math.max(maxSum, prefixSum);
}
return minSum;
}
}