优选算法——滑动窗口3(子数组)

🔥近津薪荼:个人主页

🎬个人专栏:《c语言基础知识详解》《c++基础知识详解》《Linux操作系统及网络基础知识分享》《近津薪荼的算法日迹》

**✨**每个优秀的人,

都有一段沉默的时光,

❄️那段时光是付出了很多努力,

却得不到结果的日子,我们把它叫做扎根

⭐️祝您也祝我早日破土而出,巨木参天。


1.上期参考代码

cpp 复制代码
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int left =0,right=0,n=s.size(),ret=0;
        int hash[128]={0};//使用数组来模拟哈希表
        while(right<n)
        {
            hash[s[right]]++;//进窗口
            while(hash[s[right]]>1)
            {
                hash[s[left++]]--;
            }//出窗口
          
            ret=max(ret,right-left+1);
             right++;
        }
         return ret;
    }
};

2.本期知识点导图

3.本期要讲解的题目是:

最大连续1的个数 III

要点:

二进制数组(只有0和1)

子数组可以有k个0

返回最大子数组

这题本质上就是找最长符合条件的子数组

4.解题

4.1暴力解法

暴力枚举出所有子数组,找出最长的符合要求**(不超k个0)** 的子数组,时间复杂度O(N^2)

4.2优解

找子数组的问题非常符合我们滑动窗口的特点:用两个同向双指针维护一段连续区间(窗口信息),而滑动窗口可以直接把时间复杂度降到O(N)级别,这已经是我们做的第道找连续子串的问题了,以后碰到找连续子串,最好有"使用同向双指针"的条件反射。

本题思路和上体一样,使用数组模拟的哈希表来统计和维护窗口信息

代码逻辑:

1.进窗口:将元素扔进哈希表
2.逻辑判断:0的个数是否大于k
3.出窗口:如果是就出窗口,直至否(while)
4.更新信息:出完窗口之后,窗口里的子数组一定满足要求,在此时更新length最合适

5.下期要讲解的题目是:

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

各位下期见。

相关推荐
Chester_19998 分钟前
CSP202206C.角色授权
开发语言·数据结构·c++·蓝桥杯
艾莉丝努力练剑10 分钟前
【AI大模型接入SDK】WebSocket & SSE 协议
网络·c++·websocket·网络协议·学习·面试
码匠许师傅10 分钟前
【设计模式精讲】6.抽象工厂(Abstract Factory)
c++·设计模式
xieliyu.13 分钟前
计算机网络‑IP 协议解析:核心特性总结
网络·笔记·网络协议·学习·tcp/ip·计算机网络
GKxx13 分钟前
在 HarmonyOS 上从源码构建 GCC 16(gcc/g++ + libstdc++ + libsanitizer):完整记录
c++·华为·harmonyos·鸿蒙·gcc
晴天的雨.99214 分钟前
类和对象下(内部类,匿名对象,对象拷贝时的编译器优化)
开发语言·c++·算法
陈年老古董18 分钟前
PyTorch 实现 MNIST 手写数字识别学习笔记
笔记·python·深度学习·学习
其实防守也摸鱼18 分钟前
智能体推荐:精选 AI Agent 工具与实战指南
运维·开发语言·人工智能·学习·web安全·自动化
旖旎夜光33 分钟前
LeetCode 238:除自身以外数组的乘积(前缀和) —— 题解
数据结构·c++·算法·leetcode·前缀和
一条大祥脚40 分钟前
26杭电暑期第八场(后半)快读|快写|tarjan|路径DP|mex转化|扫描线|前缀和|二分图
数据结构·算法·tarjan·杭电多校·强联通分量·动态规划dp