(写给未来遗忘的自己)
给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其总和大于等于 target
的长度最小的
子数组
[numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int first_ptr=0;
int last_ptr=0;
int num_size=nums.size();
int sum=0;
int min_club=1000000;
int min_clube=0;
for(last_ptr;last_ptr<num_size;last_ptr++)
{
sum+=nums[last_ptr];
while(sum>=target){
min_clube=last_ptr-first_ptr+1;
if(min_clube<min_club)
{
min_club=min_clube;
}
sum=sum-nums[first_ptr];
first_ptr++;
}
}
if(min_club==1000000){return 0;}
else{return min_club;}
}
};
注意:需要的是连续的最小子数组。第一次下手直接从大到小排序了,糊涂糊涂糊涂!!!!
连续数组用滑动窗口(双指针的一部分)
记录一个开始指针,一个结尾指针。结尾指针开始运行,直到满足结果target;就记录一下子数组的个数,如果比最小子数组个数小就更新,否则最小子数组不变。然后将第一个指针对应的从子数组剔除,然后移动第一个指针到下一个位置。