参考简书上,六尺帐篷的解题思路,如有侵权,请联系我删除
原文链接:点击打开链接
题目描述:
给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。
注意事项
子数组最少包含一个数字
样例
给出数组[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; } };
算法的解题技巧还是得研究一下