微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

leetcode如何实现滑动窗口

这篇文章主要介绍了leetcode如何实现滑动窗口,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

滑动窗口类题目基本上技巧在于维护一个滑动窗口,移动窗口的左右指针,使得窗口满足一定条件,关键在于如何处理窗口满足条件的地方,使得算法更高效。

最大连续1的个数

给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。

返回仅包含 1 的最长(连续)子数组的长度。

示例 1:

输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
输出:6
解释:
[1,1,1,0,0,1,1,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 6。

示例 2:

输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
输出:10
解释:
[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 10。

解题思路:

1,本题的要点不在滑动窗口长度,在于,维持窗口内0的个数<=K

2,我们定义指针l,r分别表示窗口左右下标,移动r,当A[r]==0的时候我们增加0的个数记录sum,分两种情况

A,sum>K    这个时候需要移动左指针,让0的个数减1

B,sum<=K  无需处理,继续移动右指针

func longestOnes(A []int, K int) int {    if K==0 &&len(A)<1{        return 0    }    l:=0    sum:=0    max:=0    for r:=0;r<len(A);r++{        if A[r]==0{            sum++            if sum>K{                for A[l]!=0{                    L++                }                L++                sum--            }        }          if r-l+1>max{            max=r-l+1        }    }     return max}

感谢你能够认真阅读完这篇文章,希望小编分享的“leetcode如何实现滑动窗口”这篇文章对大家有帮助,同时也希望大家多多支持编程之家,关注编程之家行业资讯频道,更多相关知识等着你来学习!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐