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     }

 

 

posted @ 2017-12-30 05:33  三人木君  阅读(268)  评论(0编辑  收藏  举报