九章算法面试题87 最小子数组

原文网址

www.jiuzhang.com

问题详情 

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

在线评测本题:

http://www.lintcode.com/zh-cn/problem/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的状态有关,所以这道题还可以用滚动数组

参考代码:

http://www.jiuzhang.com/solutions/minimum-subarray/

点赞