原理(一般情况):sum[start,end] = sum[end] - sum[start-1];
!!!记得考虑start == 0 的情况:sum [start,end] = sum[0,end] = sum[end];
用前缀和来优化还是挺香的
就比如:(本题思路为滑动窗口+前缀和)
上面为前缀和优化之后的(差别太大了)
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int sum = 0;
int left = 0;
int right = 0;
int result = 0;
int minresult = 0;
//一般情况
while(right < nums.size()){
sum += nums[right];
while(sum >= target){//满足条件
//更新最小长度
result = right - left + 1;
if(minresult == 0 || result < minresult){
minresult = result;
}
sum -= nums[left];
left++;
}
right++;
}
return minresult;
}
};
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int sum = 0;
int left = 0;
int right = 0;
int result = 0;
int minresult = 0;
//一般情况
while(right < nums.size()){
sum = 0;
for(int i = left; i <= right; i++){
sum += nums[i];
}
while(sum >= target){//满足条件
//更新最小长度
result = right - left + 1;
if(minresult == 0 || result < minresult){
minresult = result;
}
left++;
sum = 0;
for(int i = left; i <= right; i++){
sum += nums[i];
}
}
right++;
}
return minresult;
}
};