思路
直接遍历数组时间复杂度太大了
直接使用同向双指针(滑动窗口)来解决问题
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int ret = INT_MAX; //长度取最大值,通过比较逐渐减小int left = 0, right = 0, n = nums.size(), sum = 0;for (left = 0, right = 0; right < n; right++){sum += nums[right]; //left和right之间的数小于target时right右移while (sum >= target){ret = min(ret, right - left + 1); //大于target时直接left左移减少长度,直到取到最短长度为止sum -= nums[left++]; }}return ret == INT_MAX?0:ret; //判断数组中是否有子数组元素和大于target}
};