描述
给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。
备注
子数组最少包含一个数字
样例
输入:[1, -1, -2, 1]
输出:-3
输入:[1, -1, -2, 1, -4]
输出:-6
输入:[5, -4]
输出:-4
分析
1.求最小子数组,当累加和大于零的时候其实是无意义的,不需要记录,此时更新为当前元素
2.新累加和和上一次最小值相比,将最小值更新
代码
public int minSubArray(List<Integer> nums) {
if (nums.isEmpty()) {
return -1;
} else if (nums.size() == 1) {
return nums.get(0);
}
Integer sum = nums.get(0), min = sum;
for (int i = 1; i < nums.size(); i++) {
if (sum < 0) {
sum += nums.get(i);
} else {
sum = nums.get(i);
}
if (sum < min) {
min = sum;
}
}
return min;
}