LeetCode 209题解

LeetCode 209
滑动窗口的处理

public class LeetCode209 {
    
    public int minSubArrayLen(int s, int[] nums) {
        // 滑动窗口的思路
        int left = 0;
        int right = 0;
        int sum = 0;
        int res = nums.length + 1;
        while (left < nums.length) {
            // 当窗口内总和小于 s 那么窗口向右扩大  1 个
            if (right  < nums.length && sum < s) {
                sum += nums[right++];
            } else {
                sum -= nums[left++];
            }
            // 很神奇的是要这一行
            if(sum >= s){
                // 如果超了,sum >=s 可以考虑滑动窗口右移动
                res = Math.min(res, right - left);
            }
        }

        if (res == nums.length + 1)
            return 0;
        return res;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        int s = 7;
        int[] nums = new int[]{2,3,1,2,4,3};
        System.out.println(new LeetCode209().minSubArrayLen(s, nums));
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章