leetcode1293_leetcode第一题

leetcode1293_leetcode第一题【leetcode】1004. Max Consecutive Ones III

大家好,又见面了,我是你们的朋友全栈君。

题目如下:

Given an array A of 0s and 1s, we may change up to K values from 0 to 1.

Return the length of the longest (contiguous) subarray that contains only 1s. 

 

Example 1:

Input: A = [1,1,1,0,0,0,1,1,1,1,0], K = 2 Output: 6 Explanation: [1,1,1,0,0,1,1,1,1,1,1] Bolded numbers were flipped from 0 to 1. The longest subarray is underlined.

Example 2:

Input: A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3 Output: 10 Explanation: [0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1] Bolded numbers were flipped from 0 to 1. The longest subarray is underlined. 

 

Note:

  1. 1 <= A.length <= 20000
  2. 0 <= K <= A.length
  3. A[i] is 0 or 1 

解题思路:如果我们把所有0所在位置对应的下标存入一个数组inx_0中,例如Example 2的inx_0 = [0,1,4,5,9,12,13,14],因为最多把K个0变成1,要构造出最长的全为1的连续子数组,那么很显然所有进行反转操作的0所对应下标在inx_0中必须是连续的。接下来开始遍历数组A,在K大于0的条件下,遇到1则count_1加1,遇到0的话则K减1并且count_1加1(表示这个0反转成1);如果在K=0的情况下遇到0,那么需要去掉第一个0变成的1和这个0之前连续的1的数量,即count减1(减去第一个0变成1的计数),再减去第一个0前面连续的1的数量i,记为count_1减i。记录count_1出现的最大值,直到数组A遍历完成为止。

代码如下:

class Solution(object):
    def longestOnes(self, A, K):
        """
        :type A: List[int]
        :type K: int
        :rtype: int
        """
        count_1 = 0
        zero_inx = []
        res = 0
        zero_before = -1
        for i in range(len(A)):
            if A[i] == 1:
                count_1 += 1
            else:
                zero_inx.append(i)
                if K > 0:
                    K -= 1
                    count_1 += 1
                elif K == 0:
                    res = max(res,count_1)
                    first_0 = zero_inx.pop(0)
                    count_1 -= (first_0 - zero_before - 1)
                    zero_before = first_0
        res = max(res, count_1)
        return res

 

转载于:https://www.cnblogs.com/seyjs/p/10469180.html

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106957.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 十大滤波算法总结

    十大滤波算法总结由于MPU6050的深入,我也学会了一些滤波算法,自己写了一些算法,收集了一些算法,供大家一起学习分享,我的代码都是经过反复试验,复制到Arduino中就能开跑的成品代码,移植到自己的程序中非常方便。而且都仔细研究了各个算法,把错误都修正了的,所以也算个小原创吧,在别人基础上的原创。1、限幅滤波法(又称程序判断滤波法)2、中位值滤波法3、算术平均滤波法4、递推平均滤波法(又称滑动平

    2022年6月14日
    66
  • 登存拍网站_京东待审核服务单怎么处理

    登存拍网站_京东待审核服务单怎么处理1.注册打开“留拍”软件,进入主页面,然后按注册按钮:在注册页面什么内容都没有写上去的情况下,按完成按钮:首先把URL封装起来:publicclassURL{publicfinal

    2022年8月2日
    6
  • 疫情来临,车辆长期停放需注意

    汽车界有一句话,“车不是开坏的,而是放坏的。”这段时间,许多人因疫情无法外出,无奈车辆只能闲置,但车辆长期不开很是伤车怎么办?勿慌,这就为您支招,降低闲置期间汽车受损的风险。 车辆…

    2021年6月21日
    289
  • vue-property-decorator的简单介绍,一看就会

    vue-property-decorator的简单介绍,一看就会identifier!如果编译器不能够去除null或undefined,你可以使用类型断言手动去除。语法是添加!后缀:identifier!从identifier的类型里去除了null和undefined:functionfixed(name:string|null):string{functionpostfix(epithet:string){…

    2022年10月23日
    0
  • win7 boot设置_重装系统boot missing

    win7 boot设置_重装系统boot missing转自 http://blog.wsdd.org/安装linux,vista/win7双系统后,怎么引导是个问题理论上,可以从windows的bootloader引导linux,也可以linux的grub引导windows但windows更霸道,经常霸占MBR,所以最好是linux不放MBR,然后从windows的bootloader引导linux把linux装在自己的分区,不要

    2022年10月12日
    0
  • Ifconfig_5k是多少啊

    Ifconfig_5k是多少啊文章目录Linux_day06-07Linux的网络相关一.设置主机名二.chkconfig服务配置三.ntp服务四.防火墙服务——软件防火墙五.网络相关的一些命令1. **ifconfig**2. **netstat**3. **ping**4. **telnet**——用于测试端口连通性5. **curl**——资源定位Linux_day06-07Linux的网络相关一.设置主机名临时设置:#hostname 新主机名(切换用户生效,重启还原)永久设置:修改配置文件/etc/hostname

    2022年8月9日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号