Leetcode209. Minimum Size Subarray Sum

这题自然的会想到用两头往中间走的双指针或者二维dp。
首先二维dp时间复杂度并不比暴力解法好。
然后两头往中间走的双指针在两个指针指向的值相等的时候移动方向不明确。
受到Leetcode 76 Minimum Window Substring 启发,可以使用从头开始的快慢指针做。

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

Runtime: 1 ms, faster than 99.98% of Java online submissions for Minimum Size Subarray Sum.
Memory Usage: 37.2 MB, less than 18.62% of Java online submissions for Minimum Size Subarray Sum.

posted @ 2019-03-29 12:50  大胖子球花  阅读(61)  评论(0)    收藏  举报