zoukankan      html  css  js  c++  java
  • LeetCode#p1004-最大连续的1的个数

    package shuangzhizhen;
    /*
    1004. 最大连续1的个数 III
    给定一个由若干 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 <= A.length <= 20000
    0 <= K <= A.length
    A[i] 为 0 或 1
              解题思路:
                  维护一个滑动窗口
                  当 A[right] = 1 时,left 不变,right 继续移动
                  当 A[right] = 0 时,
                    0 的数量在 K 的范围内,left 不变,right 继续移动
                    0 的数量 > K,
                       当 A[left] == 0 时,即 left 指向了一个零,只需要 left 右移一格,就可以减少一个零
                       当 A[left] == 1 时,即此时窗口内包了 K 个零,需要先移动至下个零,再右移一格才能减少一个零
    
    
     */
    public class p1004 {
        public static int longestOnes(int[] A, int K) {
            int len=A.length;
            int left=0,right=0,res=0;
            for(;right<len;right++){
                if(A[right]==0){
                    if(K>0){
                        K--;
                    }
                    else {
                        while (A[left]==1)left++;
                        left++;
                    }
                }
                res=Math.max(res,right-left+1);
    
            }
            return res;
        }
    
        public static void main(String[] args) {
            int a[]={0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1};
            System.out.println(longestOnes(a,3));
        }
    }
    

      运行结果:

  • 相关阅读:
    [收藏]15分钟内快速构建数据访问层
    asp.net 水晶报表主从表关联问题
    C#基础——关于类
    C#和Sql的时间操作心得(一)
    DataGrid导出到Word/Excel文档
    [收藏]SQL Server 索引结构及其使用
    .NET环境下水晶报表使用总结
    读写文件之日志文件
    HashTable实现购物车,抛弃数据库实现方式
    触碰心灵34句
  • 原文地址:https://www.cnblogs.com/jifeng0902/p/13269746.html
Copyright © 2011-2022 走看看