0312-2020-LEETCODE-209-长度最小的子数组(双指针滑动窗口典型)

public int minSubArrayLen(int s, int[] nums) {
        int sum = 0;
        int count = 0;
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
            count++;
            if (sum >= s){
                list.add(count);
                i = i - count + 1;
                sum = 0;
                count = 0;
            }

        }
        if (list.size() == 0){
            return 0;
        }
        list.sort(Integer::compareTo);
        System.out.println(list);
        return list.get(0);
    }


    public int minSubArrayLen1(int s,int[] nums){
        //双指针优化算法
        int n = nums.length;
        if (n == 0){
            return 0;
        }
        int min = Integer.MAX_VALUE;
        int left = 0;
        int right = 0;
        int sum = 0;
        while (right < n){
            sum += nums[right];
            right++;
            while (sum >= s){
                min = Math.min(min,right - left);
                sum -= nums[left];
                left++;
            }
        }
        //一定是判断 == ,判断 == 要比判断 > 或者 < 要快
        return min == Integer.MAX_VALUE ? 0 : min;
    }
发布了98 篇原创文章 · 获赞 0 · 访问量 2202

猜你喜欢

转载自blog.csdn.net/weixin_43221993/article/details/104828463