每日一题7.28 209

209. 长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0 。

本题应该是用前缀和的方法完成,但是滑动窗口实在太牛逼了,谁用谁知道

双指针,一个指针滑动负责放入元素,另外一个指针负责取出元素,到底时退出循环,简单粗暴,最后输出记录过的最小元素数就好

class Solution {
    public int minSubArrayLen(int s, int[] nums) {
        int lo = 0, hi = 0, sum = 0, min = Integer.MAX_VALUE;
        while (hi < nums.length) {
            sum += nums[hi++];
            while (sum >= s) {
                min = Math.min(min, hi - lo);
                sum -= nums[lo++];
            }
        }
        return min == Integer.MAX_VALUE ? 0 : min;
    }
}

你可能感兴趣的:(算法,数据结构)