滑动窗口
模式:一层for循环,里面一个while
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int n = nums.size();
int result = INT_MAX;
int i = 0;
int sum = 0;
for(int j = 0;j< nums.size();j++){
sum += nums[j];
while(i<=j && sum >= target){
int dis = j - i + 1;
result = min(result, dis);
sum -= nums[i];
i++;
}
}
return result == INT_MAX ? 0 : result;
}
};
前缀和
一维前缀和
计算数组start到end的和,可以采用前缀和简化计算:
s t a r t > 0 : s u m [ s t a r t : e n d ] = s u m [ 0 , e n d ] − s u m [ 0 , s t a r t − 1 ] s t a r t = 0 : s u m [ s t a r t : e n d ] = s u m [ 0. e n d ] start > 0:sum[start:end] = sum[0,end] - sum[0,start-1] \\ \\start=0:sum[start:end]= sum[0.end] st