美文网首页
滑动窗口思想及模板

滑动窗口思想及模板

作者: 面向全麦面包编程 | 来源:发表于2020-07-18 11:36 被阅读0次

下面为模板代码,还会附上一道例题

int left = 0, right = 0;

while (right < s.size()) {
    // 增大窗口
    window.add(s[right]);
    right++;

    while (window needs shrink) {
        // 缩小窗口
        window.remove(s[left]);
        left++;
    }
}

在处理数组(或LinkedList)的许多问题中,要求我们在给定大小的所有连续子数组(或子列表)中查找或计算某些东西。 例如,看一下这个问题:

给定一个数组,求其中所有大小为K的连续子数组的平均值
Array: [1, 3, 2, 6, -1, 4, 1, 8, 2], K=5
答案为:[2.2, 2.8, 2.4, 3.6, 2.8]
    public static double[] findAverages(int K, int[] arr) {
        double[] result = new double[arr.length - K + 1];
        double windowSum = 0;
        int windowStart = 0, windowEnd = 0, index = 0;
        while (windowEnd < arr.length) {
            //增大窗口
            windowSum += arr[windowEnd];
            windowEnd++;
            //判断window是否满足条件
            while ((windowEnd-1) - windowStart + 1 == K) {
                //更新答案
                result[index++] = windowSum / K;
                //缩小窗口
                windowSum -= arr[windowStart];
                windowStart++;
            }
        }
        return result;
    }

Tips:

  • 先说一下result数组的大小怎么确定的,示例中给你9个元素,减去5个等于4个,也就是说,假如你把最后五个捆一起,可以往前移动四个次,每次一个单位,即有四个可移动空间,再算上他没有移动之前,也占一个单位,所以4+1=5
  • 注意到(windowEnd-1) - windowStart + 1 == K,这里windowEnd-1,是因为我提前将windowEnd指针后移,指向下一个元素,而判断条件时,是对窗口内的元素进行判断,此时windowEnd在窗口的外面,所以减去1,而且要记住两个索引相减再加一,就是区间内元素的个数

相关文章

  • 滑动窗口思想及模板

    下面为模板代码,还会附上一道例题 在处理数组(或LinkedList)的许多问题中,要求我们在给定大小的所有连续子...

  • 滑动窗口模板

    0X00 模板 0X01 注意事项 一定要注意 j 这个下标很容易错 一旦 break 了 j 下标的那个元素是不...

  • 滑动窗口解题模板

    双指针的一种技巧;维护一个窗口然后更新答案

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

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

  • 滑动窗口算法思想

    滑动窗口算法思想是非常重要的一种思想,可以用来解决数组,字符串的子元素问题。它可以将嵌套循环的问题,转换为单层循环...

  • 力扣 1004 最大连续1的个数 III

    题意:找出数组中最大连续的1的个数 思路:遍历数组,利用滑动窗口,维护一个最长连续的1的数组 思想:滑动窗口 复杂...

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

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

  • 2022-03-02 滑动窗口专题

    滑动窗口模板 643. 子数组最大平均数 I[https://leetcode-cn.com/problems/m...

  • 2.算法-双指针(滑动窗口)

    滑动窗口算法通用模板 3. 无重复字符的最长子串[https://leetcode-cn.com/problems...

  • 滑动窗口算法通用思想

    题目 给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。 思路 滑动窗口...

网友评论

      本文标题:滑动窗口思想及模板

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