您的位置:首页 > 其它

LintCode. 44 最小子数组

2018-01-22 08:53 225 查看
参考简书上,六尺帐篷的解题思路,如有侵权,请联系我删除

原文链接:点击打开链接

题目描述:

给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。

注意事项

子数组最少包含一个数字

样例

给出数组[1, -1, -2, 1],返回 -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_ending_here =nums[0];
int min_so_far = nums[0];

for(int i = 1; i < nums.size(); ++i)
{
min_ending_here = min(nums[i], nums[i] + min_ending_here);
//min_ending_here:此数是一个子数组的和,这个子数组的和小于当前元素,也就是加上当前元素,子数组和仍是小
min_so_far = min(min_ending_here, min_so_far);
//找出当前子数组和,以及记录的最小子数组和
}

return min_so_far;
}
};


算法的解题技巧还是得研究一下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: