给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。
注意事项
子数组最少包含一个数字
给出数组[1, -1, -2, 1],返回 -3
分析:子数组是指原数组中连续的一组数。求最小值,如果数组中元素都大于0;则直接返回数组的最小值。对于一般的情况。我们只要遍历数组,
同时对其求和,如果和数变得大于0,那就说明了此时这个子数组是不符合题意的,如果和数为负且小于之前求和过程中记录的最小值,那就将这个
和数赋值给MIN,这样遍历一趟就将其中的最小和给求出来了。
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];
for(int i=0;i<nums.size();i++)
{
if(nums[i]<min)
min=nums[i];
}
if(min>0)return min;
int sum=0;min=0;
for(int i=0;i<nums.size();i++)
{
sum=sum+nums[i];
if(sum>0)sum=0;
if(sum<min)min=sum;
}
return min;
}
};