美文网首页
滑动窗口

滑动窗口

作者: cuzz_ | 来源:发表于2018-06-21 20:32 被阅读0次

406. 和大于S的最小子数组

描述
给定一个由 n 个正整数组成的数组和一个正整数 s ,请找出该数组中满足其和 ≥ s 的最小长度子数组。如果无解,则返回 -1。

样例
给定数组 [2,3,1,2,4,3] 和 s = 7, 子数组 [4,3] 是该条件下的最小长度子数组。

挑战
如果你已经完成了O(n)时间复杂度的编程,请再试试 O(n log n)时间复杂度。

image.png

不懂的可以看看这个视频
https://www.bilibili.com/video/av24299540/?p=14

public class Solution {
    /**
     * @param nums: an array of integers
     * @param s: An integer
     * @return: an integer representing the minimum size of subarray
     */
    public int minimumSize(int[] nums, int s) {
        // 滑动窗口模型
        
        int left = 0;
        int right = -1;  // [left, right]表示窗口大小
        
        int res = Integer.MAX_VALUE;
        int sum = 0;
        
        while (left < nums.length) {
            if (right < nums.length - 1 && sum < s) {
                ++right;
                sum += nums[right];
            } else {
                sum -= nums[left];
                left++;
            }
            
            if (sum >= s) {
                res = Math.min(res, right - left + 1);
            }
        }
        
        return res == Integer.MAX_VALUE ? -1 : res;
    }
}

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

描述
给定一个字符串,请找出其中无重复字符的最长子字符串。

样例
例如,在"abcabcbb"中,其无重复字符的最长子字符串是"abc",其长度为 3。

对于,"bbbbb",其无重复字符的最长子字符串为"b",长度为1。

挑战
O(n) 时间

https://www.bilibili.com/video/av24299540/?p=15

public class Solution {
    /**
     * @param s: a string
     * @return: an integer
     */
    public int lengthOfLongestSubstring(String s) {
        int[] f = new int[256];
        
        int left = 0;
        int right = -1;
        int res = 0;
        
        while (left < s.length()) {
            if (right < s.length() - 1 && f[s.charAt(right + 1)] == 0) {
                f[s.charAt(++right)] ++;
            } else {
                f[s.charAt(left++)]--;
            }
            
            res = Math.max(res, right - left + 1);
        }
        return res;
    }
}

相关文章

  • Algorithm进阶计划 -- 滑动窗口

    滑动窗口算法滑动窗口框架滑动窗口运用 1. 滑动窗口框架 滑动窗口算法,核心思路是维护一个窗口,不断滑动,然后更新...

  • TCP可靠传输理论;流量控制;拥塞控制

    滑动窗口、超时重传、选择确认SACK 滑动窗口 滑动窗口:发送窗口、接收窗口。发送窗口内的数据都可以发送,在收到新...

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

    主要用到了滑动窗口算法两个指针之间就代表是一个滑动窗口,滑动窗口必须保证没有重复元素,同时保留最大的滑动窗口的大小...

  • Flutter-BottomSheet(底部滑动窗口)

    BottomSheet(底部滑动窗口) ModalBottomSheet(对话框式底部滑动窗口) BottomSh...

  • 无重复字符最长字串

    滑动窗口

  • (3)FlinkSQL滑动窗口demo演示

    滑动窗口(Sliding Windows)与滚动窗口类似,滑动窗口的大小也是固定的。区别在于,窗口之间并不是首尾相...

  • 滑动窗口

    406. 和大于S的最小子数组 描述给定一个由 n 个正整数组成的数组和一个正整数 s ,请找出该数组中满足其和 ...

  • 滑动窗口

    最长无重复字母子串 leetcode438

  • 滑动窗口

    介绍将TCP与UDP这样的简单传输协议区分开来的是它传输数据的质量。TCP对于发送数据进行跟踪,这种数据管理需要协...

  • 滑动窗口

    有一个整型数组 arr ,和一个大小为 w 的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。返回一个长度...

网友评论

      本文标题:滑动窗口

      本文链接:https://www.haomeiwen.com/subject/cdgcyftx.html