给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。
给出数组[1, -1, -2, 1],返回 -3
代码如下
public int minSubArray(ArrayList<Integer> nums) {
// write your code
if (nums==null)
return 0;
int len=nums.size();
int[] localmin = new int[len];
int[] globalmin = new int[len];
for(int i =0; i<len;i++){
if (i==0) {
globalmin[i] = localmin[i] = nums.get(i);
}else {
localmin[i] = Math.min(localmin[i-1]+nums.get(i), nums.get(i));
globalmin[i] = Math.min(globalmin[i-1], localmin[i]);
}
}
return globalmin[len-1];
}
这里需要注意的是“子数组”,一开始没注意到子数组,以为直接将其中的负数相加就可以了。结果就出现了例如当数组是[-5,3,-9]的时候输出的结果是-14。真正答案是-9的尴尬。