209. Minimum Size Subarray Sum

Description

Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous subarray of which the sum ≥ s. If there isn't one, return 0 instead.

Constraints

Approach

Examples

Input: s = 7, nums = [2, 3, 1, 2, 4, 3]

Output: 2

Explanation: the subarray [4, 3] has the minimal length under the problem constraint.

Solutions

/**
 * Time complexity : O(N)
 * Space complexity : O(1)
 */

class Solution {
    public int minSubArrayLen(int s, int[] nums) {
        if(nums == null || nums.length == 0) return 0;
        
        int result = Integer.MAX_VALUE,
            left = 0,
            sum = 0;
        for(int i = 0; i < nums.length; i++) {
            sum += nums[i];
            while(sum >= s) {
                result = Math.min(result, i+1-left);
                sum -= nums[left++];
            }
        }
        
        return (result == Integer.MAX_VALUE)? 0: result;
    }
}

Follow up

  • If you have figured out the O(n) solution, try coding another solution of which the time complexity is O(n log n).

Last updated

Was this helpful?