一、题目链接
链接: 209. 长度最小的子数组
二、参考代码
暴力思路:两个for循环,找符合条件的子序列,复杂度(O(n^2))
int minSubArrayLen(const vector<int>& nums, int target) {
int sum = 0;
int result = INT32_MAX;
int len = 0;
for (int i = 0; i < nums.size(); i++)
{
sum = 0;
for (int j = i; j < nums.size(); j++)
{
sum += nums[j];
if (sum >= target)
{
len = j - i + 1;
result = result < len ? result : len; break;
}
}
}
return result == INT32_MAX ? 0 : result;
}
滑动窗口:所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。
int minSubArrayLen(const vector<int>& nums, int target) {
int sum = 0;
int result = INT32_MAX;
int len = 0;
int i = 0;
for (int j = 0; j < nums.size(); j++)
{
sum += nums[j];
while (sum >= target)
{
len = j - i + 1;
result = result < len ? result : len;
sum -= nums[i++];
}
}
return result == INT32_MAX ? 0 : result;
}