zoukankan      html  css  js  c++  java
  • 最长全1串, 美团笔试题

    思路:维护一个最多有K个0存在的滑动窗口,用窗口中的元素数量(该窗口中所有0都可以变成1)更新答案。

    因此,统计【0,i】区间内0的数量,到下标i的映射。i作为滑动窗口的右端点, 通过以下方式计算出滑动窗口的左端点,进而得到窗口内元素的数量(right - left + 1, 闭区间[left, right])。

    如果当前0累计出现的次数不大于K次, 则可以将i左侧所有0变成1,左端点为0

    如果当前0累计出现次数(记为count)大于K次,我们只能最多将最近的K个0变成1,前 count - k 个0 无法变成1, 因此左端点为 map.get(count-k) + 1

    import java.util.*;
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt(), k = sc.nextInt();
            int[] a = new int[n];
            for(int i=0; i < n; i++) {
                a[i] = sc.nextInt();
            }
            Map<Integer, Integer> map = new HashMap<>();
            map.put(0, 0);// 0的数量:当前位置
            int res = 0, count = 0;
            for(int i=0; i < n; i++) {
                if(a[i] == 0) {
                    ++count;
                    map.put(count, i); // 0的数量:当前位置
                }
                if(count >= k) 
                    res = Math.max(res, i-map.get(count-k));
                else
                    res = Math.max(res, i+1);
            }
            System.out.println(res);
        }
    }
    
  • 相关阅读:
    Leetcode 从前序与中序遍历序列构造二叉树
    python基础一 day6 序列操作集合
    python基础一 day6 文件操作
    python基础一 day5 集合
    python基础一 day5 复习
    python基础一 day5 知识点
    python基础一 day4 字典
    python基础一day4 元组
    python基础一 day3 列表
    python基础一 day2 字符串操作
  • 原文地址:https://www.cnblogs.com/lixyuan/p/13187068.html
Copyright © 2011-2022 走看看