题目描述:
Given an array of integers, find the subarray with smallest sum.
Return the sum of the subarray.
Notice
The subarray should contain one integer at least.
Example
题目思路:
For [1, -1, -2, 1]
, return -3
.
这题虽然没有用dp array,但是还是dp的思想:遍历一遍数组,在遍历的过程中,对于每个i,我都有两种选择:如果之前的local sum加上A[i]能更小,我就加上A[i],如果不能,我就把local sum reset成A[i]. 同时,用一个global sum去记录最小的那个local sum。这样,最后的答案就是global sum。
Mycode(AC = 38ms):
class Solution {
public:
/**
* @param nums: a list of integers
* @return: A integer denote the sum of minimum subarray
*/
int minSubArray(vector<int> nums) {
// write your code here
if (nums.size() == 0) return 0;
int global = nums[0], local = nums[0];
for (int i = 1; i < nums.size(); i++) {
// current local has 2 options:
// pick the sum of old local and current element,
// or reset the sum to current element
local = min(local + nums[i], nums[i]);
global = min(global, local);
}
return global;
}
};