题目要求:
给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。
注意事项
子数组最少包含一个数字
样例
给出数组[1, -1, -2, 1],返回 -3
思路:
这个和41,最大子数组如出一辙,这次我写出来了……
先遍历一遍,假如所有的数都是大于0的,那么就返回最小的那个数。 第二遍找最小的和。
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 i;
int min = nums[0];
for(i = 0; i < nums.size(); i++){
if(nums[i] < min){
min = nums[i];
}
}
if(min >= 0){
return min;
}
int sum = 0;
for(i = 0; i < nums.size(); i++){
sum += nums[i];
if(sum > 0){
sum = 0;
}
if(sum < min){
min = sum;
}
}
return min;
}
};
该博客介绍了LintCode上的一道题——寻找具有最小和的子数组。题目要求在给定的整数数组中找到一个子数组,其和最小,并返回这个最小和。注意子数组至少包含一个数字。博主分享了思路,提到这个问题与最大子数组问题类似,可以通过遍历数组两次来找出答案,第一次遍历判断是否所有数都大于0,第二次遍历寻找最小和。
371

被折叠的 条评论
为什么被折叠?



