44. 最小子数组

Posted 三人木君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了44. 最小子数组相关的知识,希望对你有一定的参考价值。

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

 注意事项

子数组最少包含一个数字

样例

给出数组[1, -1, -2, 1],返回 -3

 

动态规划

原数组为nums[]

令S[i]为到i为止的最小和

那么S[i]=min{nums[i], nums[i]+S[i-1] }

basecase: S[0]=nums[0]

为了节省空间,可以结合nums[]和S[]

 1 int minSubArray(vector<int> &nums) {
 2     // write your code here
 3         int sum = nums[0];
 4         int min_sum = nums[0];
 5         for (int i = 1; i<nums.size(); i++) {
 6             sum = min(nums[i], nums[i] + nums[i - 1]);
 7             if (min_sum>sum)
 8             {
 9                 min_sum = sum;
10             }
11             nums[i] = sum;
12         }
13         return min_sum;
14     }

 

 

以上是关于44. 最小子数组的主要内容,如果未能解决你的问题,请参考以下文章

最大子数组(最小子数组)

406. 和大于S的最小子数组

最小子数组

LintCode Python 简单级题目 最小子数组和最大子数组和

将数组拆分为包含唯一对象组合的最小子数组

java 具有k个元素的最小子数组