(C++)最大连续1的个数--滑动窗口
2023-12-13 08:50:20
个人主页:Lei宝啊?
愿所有美好如期而遇
算法原理?
滑动窗口其实就是种双指针,只是这种双指针只向后移动,不会回退,具有单调性,也就是说,整个过程中left和right只会++。
本题去反转0,反转个数为k,也就是说,可以往后遍历,为0,记录一次,没超过k,继续向后走,超过k,则使左边向右走过一个0,右边继续向后走,我们画图来看。
图示
?
以此类推,下面不再继续画。
代码
class Solution {
public:
int longestOnes(vector<int>& nums, int k)
{
int count = 0 , len = 0;
for(int left = 0, right = 0; right < nums.size(); right++)
{
if(nums[right] == 0)
{
count++;
while(count > k)
if(nums[left++] == 0)
{
count--;
}
}
len = max(len, right-left+1);
}
return len;
}
};
文章来源:https://blog.csdn.net/m0_74824254/article/details/134935624
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!