ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

滑动窗口的套路

2020-10-09 10:02:13  阅读:159  来源: 互联网

标签:right 窗口 边界 匹配 套路 滑动 left


滑动窗口是个啥

1.很显然,是个窗口,还能滑动

2.为啥要滑动?因为要在 长导轨 上匹配某个物体,并且不一定一开始就匹配上了,所以要左右滑动了

3.匹配方式有哪些?
  • 匹配物 和 窗口 完全吻合
  • 匹配物 是 窗口 的一部分,此时常常伴随着问题:什么时候窗口最小?

滑动窗口题怎么做

1.一个窗口是怎么表示的?左右边界

2.于是核心问题就变成什么时候 右边界-左边界 最小?
  • 固定左边界,右边界不断向右扩展(窗口扩大
  • 条件满足(如窗口全部包含了带匹配物),此时固定右边界,判断左边界是否可以右移(窗口是否可以缩小)
  • 得到最终的窗口大小,多组匹配结果下取最小的窗口
/* 滑动窗口算法框架 */
void slidingWindow(string s, string t) {
    unordered_map<char, int> need, window;
    for (char c : t) need[c]++;

    int left = 0, right = 0;
    int valid = 0; 
    while (right < s.size()) {
        // c 是将移入窗口的字符
        char c = s[right];
        // 右移窗口
        right++;
        // 进行窗口内数据的一系列更新
        ...

        /*** debug 输出的位置 ***/
        printf("window: [%d, %d)\n", left, right);
        /********************/

        // 判断左侧窗口是否要收缩
        while (window needs shrink) {
            // d 是将移出窗口的字符
            char d = s[left];
            // 左移窗口
            left++;
            // 进行窗口内数据的一系列更新
            ...
        }
    }
}

标签:right,窗口,边界,匹配,套路,滑动,left
来源: https://www.cnblogs.com/miyanyan/p/13784250.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有