滑动窗口|209. 长度最小的子数组|713. 乘积小于 K 的子数组|3. 无重复字符的最长子串

209. 长度最小的子数组

点击查看代码
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int n = nums.length;
        int res = Integer.MAX_VALUE;
        int sum = 0;
        int l = 0;
        for(int i = 0; i < n ; i++){
            //1缩小窗口
            //1.1右端往右走
            sum += nums[i];
            while(sum >= target){//满足要求 到 不满足要求
                //满足要求求一下res
                res = Math.min(res, i - l + 1);
                //1.2左端往右走
                sum -= nums[l];
                l++;
            }
        }
        return res == Integer.MAX_VALUE ? 0 : res ;
    }
}

713. 乘积小于 K 的子数组

点击查看代码
class Solution {
    public int numSubarrayProductLessThanK(int[] nums, int k) {
        if (k <= 1) return 0;
        int  n = nums.length;
        int res = 0;
        int sum = 1;
        int l = 0;
        for(int i = 0; i < n ; i++){
            sum *= nums[i];//右端往右走
            while(sum >= k){//不满足要求 到 满足要求
                sum /= nums[l];
                l++;
            }
            //满足要求了求一下res
            res += i - l + 1;
        }
        return res;

    }
}

3. 无重复字符的最长子串

点击查看代码
class Solution {
    public int lengthOfLongestSubstring(String s) {
        char[] a = s.toCharArray();
        int n = a.length;
        int res = 0;
        int l = 0;
        Map<Character, Integer> map = new HashMap<>();
        for(int r = 0; r < n; r++){
            map.put(a[r],map.getOrDefault(a[r],0) + 1);
            while(map.get(a[r]) > 1){//不满足条件
                map.put(a[l], map.get(a[l]) - 1);
                l++;
            }
            //满足条件
            res = Math.max(res, r - l + 1);
        }
        return res;
    }
}
posted @ 2025-12-21 22:33  柳成荫y  阅读(3)  评论(0)    收藏  举报