给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。
注意事项
子数组最少包含一个数字
样例
给出数组[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 }