博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
每日一题1004-最大连续1的个数 III
阅读量:745 次
发布时间:2019-03-21

本文共 833 字,大约阅读时间需要 2 分钟。

1.题目详情

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

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

在这里插入图片描述

2.解题思路

这道题是窗口滑动类型题,很容易想到利用双指针。定义两个指针left和right,right不断向后遍历,增加窗口长度,遍历过程中,若遇到0,将其翻转为1并计数为count。若count大于所给的K值,那么left后移并接着遍历,需保持窗口不变

这题就是求最大的窗口。所以窗口变小是没有意义的。

1)窗口增大:left不变,right右移,即right += 1

什么时候增大?窗口内的0,数量没有达到上限K。

2)窗口不变:left跟着right右移

什么时候不变?窗口内的0,数量达到了上限K。

3.代码实现

class Solution:    def longestOnes(self, A: List[int], K: int) -> int:        #窗口滑动问题,两个指针都从0开始        left,right,count = 0,0,0 #初始化左右指针,将0翻转为1的个数        #左指针先不动,右指针向右滑动        for right in range(0,len(A)):            if A[right] == 0:                count += 1  #将0翻转为1的个数+1            if count > K: #将0变1的个数大于规定的K个值                if A[left] == 0:  #并且左指针指向的数字为0,那么将0翻转为1的个数减1,因为不能超过规定k值                    count -= 1                left += 1  #左指针后移一位        return right-left+1

4.知识点

理解窗口滑动思想

转载地址:http://hbagz.baihongyu.com/

你可能感兴趣的文章