Draymonders / Code-Life

The marathon continues though.
27 stars 3 forks source link

双指针刷题模板 #54

Open Draymonders opened 4 years ago

Draymonders commented 4 years ago

双指针刷题模板

这里以 leetcode 209. 长度最小的子数组为例

我的双指针模板是 [l, r)的,即不包含右侧的r

class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        int n = nums.size();
        int res = n+5;
        int l = 0, r = 0;
        int sum = 0;
        while (r < n) {
            while (sum < s && r < n) {
                sum += nums[r];
                r++;
            }
            while (sum >= s && l < r) {
                res = min(res, (r - l));
                sum -= nums[l];
                l++;
            }
        }
        return res > n ? 0 : res;
    }
};