力扣209 长度最小子数组 双指针滑动窗口
程序员文章站
2022-06-02 13:49:19
...
1、暴力解法ON2
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int i = 0;
int j = 0;
int sum = 0;
if(nums.size() == 0)
{
return 0;
}
vector<int> len;
for(int i =0; i < nums.size(); i++)
{
sum+=nums[i];
}
if(sum < s)return 0;
for(int i = 0; i < nums.size(); i++)
{
sum = 0;
for(int j = i; j < nums.size(); j++)
{
sum += nums[j];
if(sum >= s)
{
len.push_back(j - i + 1);
sum = 0;
break;
}
}
}
sort(len.begin(),len.end());
return len.front();
}
};
2、双指针ON(滑动窗口)
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int i = 0;
int j = 0;
int sum = 0;
int ans = INT_MAX;
for(int i = 0; i < nums.size(); i++)
{
sum += nums[i];
}
if(sum < s)
{
return 0;
}
sum = 0;
while(j < nums.size())
{
sum += nums[j];
while(sum >= s)
{
ans = min(ans,j-i+1);
sum -= nums[i];
i++;
}
j++;
}
return ans;
}
};