[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];

 

posted @ 2018-03-20 04:59  马大欧  阅读(163)  评论(0编辑  收藏  举报