C C++最新滑动窗口算法模板及简单样例,2024年最新阿里P8亲自教你

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

    while (right < n)
    {    
        sum += nums[right];
        while(sum >= target)
        {
            flag = 1;
            if (right - left < len) len = right - left + 1;
            sum -= nums[left];
            left++;
        }
        right++;
    }
    if(flag == 1) return len;
    else return 0;
}

};


### 无重复字符的最长子串



[无重复字符的最长子串](https://bbs.csdn.net/topics/618668825)


给定一个字符串 `s` ,请你找出其中不含有重复字符的 **最长连续子字符串**的长度。


![](https://img-blog.csdnimg.cn/direct/e4246ea5c3c34fc9a8464c14e38fb609.png)


思路:利用哈希表作为判断字符是否重复的依据,使用滑动窗口更新最长的长度。


因为数据比较少,所以可以直接使用 ASCII 来构建哈希表,将ASCII 当做下标,出现了的话那个位置的数就加1.


判断条件为:hash 表里 right 位置的值大于1,说明有重复的字符进入了哈希表,然后开始出窗口,循环出,直至这个 hash 表里 right 位置的值等于1后,right++,为下一次进窗口做准备。



class Solution {
public:
int lengthOfLongestSubstring(string s) {
int left = 0,right = 0,n=s.size();
int len = 0;
int hash[128]={0};
while(right < n)
{
hash[s[right]]++;
while(hash[s[right]]>1)
{
hash[s[left++]]–;
}
len = max(len, right -left + 1);
right++;
}
return len;
}
};


### 最大连续1的个数



[最大连续1的个数 III](https://bbs.csdn.net/topics/618668825)


给定一个二进制数组 `nums` 和一个整数 `k`,如果可以翻转最多 `k` 个 `0` ,则返回 *数组中连续 `1` 的最大个数* 。


![](https://img-blog.csdnimg.cn/direct/24641222d9214703a2f6fa3b4de5206c.png)


此题如果采用正常方法的话,将是特别特别难的一道题,所以采用正难则反的思想。


将题目中找反转不大于K个0后的连续1的最大个数,转化为:找最长的子数组,其中这个子数组中 0 的个数不大于 K,利用滑动指针来解决就可以了,判断条件就是子数组中 0 个数小于等于 K,更新的结果就是这个子数组的长度!



class Solution {
public:
int longestOnes(vector& nums, int k) {
//题目转化为在数组中找到一个子数组,里面零的个数小于 K 个
int left = 0, right = 0, zero = 0;
int n = nums.size();
int len = 0;
while (right < n)
{
if(nums[right]==0) zero++;
while (zero > k)
{
if (nums[left] == 0) zero–;
left++;
}
len = max(len, right - left+1);
right++;
}
return len;
}
};


### 将 x 减到 0 的最小操作数


 [将 x 减到 0 的最小操作数](https://bbs.csdn.net/topics/618668825)


![img](https://img-blog.csdnimg.cn/img_convert/0ebfe288a55bdce25f33ae8fc05c6386.png)
![img](https://img-blog.csdnimg.cn/img_convert/8a37ee438072bdcecfefc1d7f5480f6f.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

n.net/topics/618668825)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值