面试经典题---209.长度最小的子数组

209.长度最小的子数组

我的解法:

滑动窗口:

  • 使用指针left和right维护一个滑动窗口[left,right],sum记当前滑动窗口的元素之和;
  • 一旦窗口和大于等于了target,就持续向右收缩滑动窗口,期间更新窗口长度,并记录出现的最小长度;
  • 一旦窗口的元素和小于target,就向右扩张窗口,重复上述过程。
class Solution {
public:
    int minSubArrayLen(int target, vector& nums) {
        int left = 0, sum = 0, len = 0;
        int res = INT_MAX;
        for(int right = 0; right < nums.size(); ++right){
            sum += nums[right];
            while(sum >= target){
                len = right - left + 1;
                res = min(res, len);
                sum -= nums[left++];
            }
        }
        return res == INT_MAX ? 0 : res;
    }
};

你可能感兴趣的:(面试,算法,c++,leetcode)