原文网址
问题详情
给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。
在线评测本题:
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的状态有关,所以这道题还可以用滚动数组