- 长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0
滑动窗口
class Solution {
public:
/*
滑动窗口
*/
int minSubArrayLen(int target, vector<int>& nums) {
int size = nums.size();
if (size == 0) {
return 0;
}
int num = 0;
for (int i = 0; i <= size - 1; i++) {
num += nums[i];
}
if (num < target) {
return 0;
}
if (num == target) {
return size;
}
int start = 0, end = 0;
int res = 1e8;
while (end < size) {
int ress = 0;
for (int i = start; i <= end; i++) {
ress += nums[i];
}
if (ress >= target) {
res = min(res, end - start + 1);
start++;
} else {
end++;
}
}
return res;
}
};
纯暴力
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int size = nums.size();
int least = 1e9;
int res = 0;
for (int i = 0; i < size; i++) {
res += nums[i];
}
if (res == target) {
return size;
}
if (res < target) {
return 0;
}
for (int i = 0; i < size; i++) {
int num = 0;
for (int j = i; j < size; j++) {
num += nums[j];
if (num >= target) {
least = min(least, j - i + 1);
break;
}
}
}
return least;
}
};