问题分析
找出总和大于目标值的最短子串,想到的方法是用双指针遍历,前面的指针先前走直到大于目标,此时后面的指针再向前走,直到小于目标。
代码
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int i=0,j=0;
int sum=0,min_len=INT_MAX,len=0;
while(j<nums.size()){
if(nums[j] >= s){
return 1;
}
else{
len += 1;
sum += nums[j];
while(sum < s && j < nums.size()){
j++;
len += 1;
sum += nums[j];
}
if(j == nums.size() && min_len == INT_MAX) return 0 ;
if(j == nums.size()) return min_len;
while (sum - nums[i] >= s) {
sum -= nums[i];
i++;
len--;
}
min_len = min_len < len ? min_len : len;
sum -= nums[i];
i++;
len--;
j++;
}
}
if (len == 0) return 0;
return min_len;
}
};
Maximum Average Subarray I
最小平均子序列,求出连续k个子序列的最大平均值。滑动窗口的想法,以第一个长度为k的子序列为基准,向后遍历,遍历的过程用总和减第一个数加新的数得到新的和。