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));
    }

}

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