1.描述
给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。
注意事项
子数组最少包含一个数字
样例
给出数组[1, -1, -2, 1],返回 -3
2.分析
最小子数组的思想与最大子数组及其相似,具体分析见《LintCode 最大子数组》。
3.代码
class Solution {
public:
/*
* @param nums: a list of integers
* @return: A integer indicate the sum of minimum subarray
*/
int minSubArray(vector<int> &nums) {
// write your code here
int min=nums[0];
int n=nums.size();
int sum=0;
for(int i=0;i<n;i++)
{
sum+=nums[i];
if(sum<min) min=sum;
if(sum>0) sum=0;
}
return min;
}
};
4.总结
问题与最大子数组类似,区别在于当加和大于0时说明当前数组加和为“负面影响”,因此加和大于0时sum清零。当加和小于min时,更新最小和min。具体总结见最大子数组。