209. Minimum Size Subarray Sum - cocoder39/coco39_LC GitHub Wiki

209. Minimum Size Subarray Sum

int minSubArrayLen(int s, vector<int>& nums) {
        int res = 0, sum = 0;
        for (int left = 0, right = 0; right < nums.size(); right++) {
            sum += nums[right];
            if (sum >= s) {
                while (sum - nums[left] >= s) {
                    sum -= nums[left++];
                }
                if (res == 0 || res > right - left + 1) {
                    res = right - left + 1;
                }
            }
        }
        return res;
    }

Solution 2: enumeration + binary search takes advantage of range sum, takes O(n log n) time and O(n) memory.

int minSubArrayLen(int s, vector<int>& nums) {
        vector<int> sums(nums.size() + 1);
        for (int i = 1; i < sums.size(); i++) {
            sums[i] += sums[i - 1] + nums[i - 1];  
        }
        
        int res = 0;
        for (int i = 0; i < sums.size(); i++) {
            int start = i, end = sums.size() - 1;
            while (start + 1 < end) {
                int mid = start + (end - start) / 2;
                if (sums[mid] < sums[i] + s) {
                    start = mid;
                }
                else {
                    end = mid;
                }
            }
            if (sums[start] - sums[i] >= s) {
                res = res == 0 ? start - i : min(res, start - i);
            } 
            else if (sums[end] - sums[i] >= s) {
                res = res == 0 ? end - i : min(res, end - i);
            }
        }
        return res;
    }
⚠️ **GitHub.com Fallback** ⚠️