[LintCode笔记了解一下]44.Minimum Subarray

这道题和max subarray很类似,我用local 和 global 的dp方式阔以解决这道

那么我们来看动态规划的四个要素分别是什么?

State:

localmin[i] 表示以当前第i个数最为结尾的最小连续子数组和。

globalmin[i] 表示以当i个数里面(可以不以第i个作为结尾)的最小连续子数组和。

Function:

localmin[i] = min(localmin[i - 1] + nums.get(i), nums.get(i));

globalmin[i] = min(globalmin[i - 1], localmin[i]);

initialize:

globalmin[0] = localmin[0] = nums.get(0);

answer:

globalmin[n-1]/

优化:

由于这道题第i个状态只跟i-1的状态有关,所以这道题还可以用滚动数组

vector<int> localMin(nums.size());
vector<int> globalMin(nums.size());
localMin[0]=globalMin[0]=nums[0];
for(int i=1;i<nums.size();i++){
  localMin[i]=min(localMin[i-1]+nums[i],nums[i]);
  globalMin[i]=min(globalMin[i-1],localMin[i]);    
}
return globalMin[nums.size()-1];
原文地址:https://www.cnblogs.com/otakuhan/p/8606864.html