今天练习:长度最小的子数组
每当遇到写大于小于号的时候,好好想想是否需要添加等于号!
#include<iostream>
#include<vector>
using namespace std;
/*
使用滑动窗口法
*/
class Soluation {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int result = INT32_MAX; //赋一个超大的值,用来存放最小窗口的长度,也就是最小序列的长度
int sum = 0; // 窗口中元素的和
int i = 0; // 窗口的开端
int subLength = 0; // 窗口的长度
for (int j = 0; j < nums.size(); j++) {
sum += nums[j]; // 将窗口的后端不断向后移动,且把窗口中的元素加起来
while (sum >= target) { //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!注意这里需要加等于号=
subLength = j - i + 1; // 计算此时窗口的长度
result = result < subLength ? result : subLength;
sum -= nums[i++]; // 把窗口开头的元素减掉,看窗口内元素是否还大于target
}
}
return result == INT32_MAX ? 0 : result;
}
};
int main() {
Soluation a;
int target = 0;
cout << "请输入目标值target:" << endl;
cin >> target;
vector<int> nums;
int n = 0;
cout << "请输入数组长度n:" << endl;
cin >> n;
cout << "请输入数组nums:" << endl;
int tem = 0;
for (int i = 0; i < n; i++) {
cin >> tem;
nums.push_back(tem);
}
cout<< a.minSubArrayLen(target,nums) << endl;
return 0;
}