【C++速刷精品】滑动窗口

【C++速刷精品】滑动窗口

  • 一、长度最小的子数组
    • 1、题目链接
    • 2、题目解析
    • 3、代码
  • 二、无重复字符的最长字串
    • 1、题目链接
    • 2、题目解析
    • 3、代码
  • 三、最大连续1的个数III
    • 1、题目链接
    • 2、题目解析
    • 3、代码
  • 四、将x减到0的最小操作数
    • 1、题目链接
    • 2、题目解析
    • 3、代码
  • 五、水果成篮
    • 1、题目链接
    • 2、题目解析
    • 3、代码
  • 六、找到字符串中所有字母异位词
    • 1、题目链接
    • 2、题目解析
    • 3、代码
  • 七、串联所有单词的字串
    • 1、题目链接
    • 2、题目解析
    • 3、代码
  • 八、最小覆盖字串
    • 1、题目链接
    • 2、题目解析
    • 3、代码


一、长度最小的子数组

1、题目链接

leetcode链接

【C++速刷精品】滑动窗口_第1张图片

2、题目解析

讲解一下什么是滑动窗口?
滑动窗口就是一个同向双指针利用单调性的两个指针区间为窗口,right指针往右移动则是入窗口,left指针往右移动则是出窗口,我们用的步骤如下图:
【C++速刷精品】滑动窗口_第2张图片
【C++速刷精品】滑动窗口_第3张图片

3、代码

【C++速刷精品】滑动窗口_第4张图片

二、无重复字符的最长字串

1、题目链接

leetcode链接
【C++速刷精品】滑动窗口_第5张图片

2、题目解析

构造一个hash函数表,将right和left从0开始,不断的将right的值存入到hash表中,如果发现表中存入了两个了,那么就更新left的值,并进行更新ret。

【C++速刷精品】滑动窗口_第6张图片

3、代码

【C++速刷精品】滑动窗口_第7张图片

三、最大连续1的个数III

1、题目链接

题目链接

【C++速刷精品】滑动窗口_第8张图片

2、题目解析

此时定义一个ret用来记录走过的0的个数,right走过一个0就加加,left走过一个0就减减,我们循环的条件在于:当right指针遇见1的时候,一直往右走直到遇见0,每遇见一个0就将ret进行加加,直到ret的个数比k大的时候就需要出窗口了,也就是我们的left指针往右移动,直到找到0,每遇见一个0就将ret减减再left往右走一步,这个判断跳出条件在于ret

【C++速刷精品】滑动窗口_第9张图片

3、代码

【C++速刷精品】滑动窗口_第10张图片

四、将x减到0的最小操作数

1、题目链接

leetcode链接

【C++速刷精品】滑动窗口_第11张图片

2、题目解析

【C++速刷精品】滑动窗口_第12张图片

【C++速刷精品】滑动窗口_第13张图片

3、代码

【C++速刷精品】滑动窗口_第14张图片

五、水果成篮

1、题目链接

leetcode链接

【C++速刷精品】滑动窗口_第15张图片

2、题目解析

【C++速刷精品】滑动窗口_第16张图片

3、代码

【C++速刷精品】滑动窗口_第17张图片

六、找到字符串中所有字母异位词

1、题目链接

leetcode链接
【C++速刷精品】滑动窗口_第18张图片

2、题目解析

【C++速刷精品】滑动窗口_第19张图片

3、代码

【C++速刷精品】滑动窗口_第20张图片

七、串联所有单词的字串

1、题目链接

leetcode传送门

【C++速刷精品】滑动窗口_第21张图片

2、题目解析

【C++速刷精品】滑动窗口_第22张图片
【C++速刷精品】滑动窗口_第23张图片

3、代码

【C++速刷精品】滑动窗口_第24张图片

八、最小覆盖字串

1、题目链接

leetcode链接

【C++速刷精品】滑动窗口_第25张图片

2、题目解析

【C++速刷精品】滑动窗口_第26张图片

【C++速刷精品】滑动窗口_第27张图片

3、代码

NO1.利用unordered_map容器来进行解决,但算法复杂度太高
【C++速刷精品】滑动窗口_第28张图片

No2.用hash数组进行解决,算法复杂度低
【C++速刷精品】滑动窗口_第29张图片


你可能感兴趣的:(C++刷题,c++,开发语言,哈希算法)