lintcode题目
难度:简单
类型:数组
版本1
class Solution {
public:
int minSubArray(vector<int> &nums) {
int n = nums.size();
vector<int> sum(n+1, 0);
for(int i = 0; i < n; i++) sum[i+1] += sum[i] + nums[i];
int res = INT_MAX;
for(int i = 1; i <= n; i++){
for(int j = 0; j <= i; j++){
res = min(res, sum[i] - sum[j-1]);
}
}
return res;
}
};
版本2
前缀和+最大前缀和+最小和
控制三个变量时间复杂度为
O
(
n
)
O(n)
O(n)空间复杂度为
O
(
1
)
O(1)
O(1)
class Solution {
public:
int minSubArray(vector<int> &nums) {
int n = nums.size();
if(!n) return 0;
int sum = 0;
int res = INT_MAX, maxSum = 0;
for(int i = 1; i <= n; i++){
sum += nums[i-1];
res = min(res, sum - maxSum);
maxSum = max(maxSum, sum);
}
return res;
}
};