209. 长度最小的子数组

剑指 Offer II 008. 和大于等于 target 的最短子数组open in new window

Approach 1,前缀和

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int n = nums.length;
        int[] pre = new int[n+1];
        for (int i = 0; i < n; i++) {
            pre[i+1] = nums[i] + pre[i];
        }

        int N = Integer.MAX_VALUE;
        int min = N;
        int left = 1, right = 1;
        
        while (left <= right && right < n+1) {
            if (pre[right] - pre[left-1] >= target) {
                min = Math.min(min, right-left+1);
                left++;
            } else {
                right++;
            }
        }

        return min == N ? 0 : min;
    }
}
Last Updated:
Contributors: jesse