
🔥近津薪荼:个人主页
🎬个人专栏:《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.本期要讲解的题目是:

要点:
二进制数组(只有0和1)
子数组可以有k个0
返回最大子数组
这题本质上就是找最长符合条件的子数组
4.解题
4.1暴力解法
暴力枚举出所有子数组,找出最长的符合要求**(不超k个0)** 的子数组,时间复杂度O(N^2)
4.2优解
找子数组的问题非常符合我们滑动窗口的特点:用两个同向双指针维护一段连续区间(窗口信息),而滑动窗口可以直接把时间复杂度降到O(N)级别,这已经是我们做的第三道找连续子串的问题了,以后碰到找连续子串,最好有"使用同向双指针"的条件反射。
本题思路和上体一样,使用数组模拟的哈希表来统计和维护窗口信息