给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。
样例
给出数组[1, -1, -2, 1],返回 -3
注意事项
子数组最少包含一个数字
思路:从第一个数开始累加,但是如果到第n个数开始和为正数,那么就没必要继续将后面的数组元素继续相加,因为无论第n+1个数为正还是为负,和前n个数的和想加以后都会让总和变得更大。
因此,每做一次加和,就将此次得到得值和之前得到得最小值比较一下,如果和大于0,就将加和重置为0,重新开始
public static int minSubArray(List<Integer> nums)
{
int len = nums.size();
int sum =0;
int min_value=0;
for (int i=0;i<len;i++)
{
sum+=nums.get(i);
min_value = Math.min(min_value, sum);
sum = Math.min(0, sum);
}
return min_value;
}
和求最下子数组一样问题得还有最大子数组,原理类似