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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • opc服务器配置PLC信号,plc配置OPC服务器

    opc服务器配置PLC信号,plc配置OPC服务器plc配置OPC服务器内容精选换一换云耀云服务器(HyperElasticCloudServer,HECS)是可以快速搭建简单应用的新一代云服务器,具备独立、完整的操作系统和网络功能。提供快速应用部署和简易的管理能力,适用于网站搭建、开发环境等低负载应用场景。具有高性价比、易开通、易搭建、易管理的特点。云耀云服务器与弹性云服务器的主要区别:云耀云服务器:云耀云服务器是精简视图提供了云服务器…

    2022年6月20日
    23
  • 平衡二叉树的数据结构_红黑树数据结构

    平衡二叉树的数据结构_红黑树数据结构红黑树Java集合系列之TreeMap详细介绍(源码解析)和使用示例代码来自算法第四版红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。红黑树实际上是由2-3-4树转换而来,红黑树能够以O(log2n)的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据

    2022年8月30日
    0
  • AssertValid函数学习 .「建议收藏」

    AssertValid函数学习 .「建议收藏」转自http://tsitao.blog.163.com/blog/static/29795822006914105840496/ VC的调试中,AssertValid和Dump函数的应用CObject::AssertValid成员函数提供对对象内部状态的运行时检查。尽管从CObject派生类时不需要重写AssertValid,但可以通过重写使您的类更安全可靠。Asse

    2022年7月14日
    18
  • java list三种遍历方法性能比較

    java list三种遍历方法性能比較

    2021年9月1日
    55
  • VMware16的安装及VMware配置Linux虚拟机(详解版)

    VMware16的安装及VMware配置Linux虚拟机(详解版)前言为了Linux系统初学者的学习,以及不必要再花费成本与时间去安装Linux系统,使用VMware下配置Linux虚拟机进行学习也是个不错的选择。次文详解了VMware16软件的安装步骤,以及Linux虚拟机的CentOS7简易安装的步骤,操作简单,完全足够Linux系统初学者的学习。VMware软件下载地址:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.htmlCentOS7下载映像

    2022年7月16日
    43
  • eclipse导入maven工程pom.xml文件不起作用[通俗易懂]

    eclipse导入maven工程pom.xml文件不起作用[通俗易懂]导入硬盘中的maven工程时要确保import的是maven选项下的ExistingMavenPojects。接着要替换maven仓库的地址为自己定义的地址window->preference->maven->usersettings

    2022年5月23日
    41

发表回复

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

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