首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >找出通过车辆最多颜色

找出通过车辆最多颜色

原创
作者头像
代码小李
发布2025-01-27 19:48:34
发布2025-01-27 19:48:34
5090
举报

题目

在一个狭小的路口,每秒只能通过一辆车,假如车辆的颜色只有 3 种,找出 N 秒内经过的最多颜色的车辆数量,三种颜色编号为 0, 1, 2

输入

第一行输入的是通过的车辆颜色信息。比如[0, 1, 1, 2] 代表 4 秒钟通过的车辆颜色分别是 0, 1, 1, 2第二行输入的是统计时间窗,整型,单位为秒。

输出

输出指定时间窗内经过的最多颜色的车辆数量

输入

0 1 2 1

3

输出

2

说明

[1,2,1]这个 3 秒时间窗内,1 这个颜色出现 2 次,数量最多

[1,2,1]这个 3 秒时间窗内,1 这个颜色出现 2 次,数量最多

要解决这个问题,可以使用滑动窗口的技巧。具体来说,我们需要找到一个长度为 N 的子序列,使得这个子序列中出现次数最多的颜色的数量最大。

解题思路

  1. 初始化:定义一个哈希表 color_count 来记录每种颜色在当前窗口内的出现次数。
  2. 滑动窗口:使用两个指针 leftright 来表示当前窗口的左右边界,初始时都指向数组的开头。
  3. 更新最大值:在每次移动右指针时,更新当前窗口内出现次数最多的颜色的数量,并记录最大值。
  4. 调整窗口:当窗口大小超过 N 时,移动左指针以保持窗口大小为 N

代码实现(Java)

代码语言:java
复制
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class MaxColorCount {
    public static int maxColorCount(int[] colors, int N) {
        int n = colors.length;
        if (N >= n) {
            return n; // 如果 N 大于等于数组长度,直接返回数组长度
        }

        Map<Integer, Integer> colorCount = new HashMap<>();
        int maxCount = 0;
        int left = 0;

        for (int right = 0; right < n; right++) {
            // 更新当前颜色的计数
            colorCount.put(colors[right], colorCount.getOrDefault(colors[right], 0) + 1);
            maxCount = Math.max(maxCount, colorCount.get(colors[right]));

            // 当窗口大小超过 N 时,移动左指针
            if (right - left + 1 > N) {
                colorCount.put(colors[left], colorCount.get(colors[left]) - 1);
                if (colorCount.get(colors[left]) == 0) {
                    colorCount.remove(colors[left]);
                }
                left++;
            }
        }

        return maxCount;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] inputColors = scanner.nextLine().split(" ");
        int N = scanner.nextInt();

        int[] colors = new int[inputColors.length];
        for (int i = 0; i < inputColors.length; i++) {
            colors[i] = Integer.parseInt(inputColors[i]);
        }

        System.out.println(maxColorCount(colors, N));
    }
}

解释

  1. 初始化
    • colorCount 是一个哈希表,用于记录每种颜色在当前窗口内的出现次数。
    • maxCount 用于记录当前窗口内出现次数最多的颜色的数量。
    • leftright 分别是窗口的左右边界指针。
  2. 滑动窗口
    • 使用 right 指针遍历数组,每次将当前颜色的计数加1,并更新 maxCount
    • 当窗口大小超过 N 时,移动 left 指针以保持窗口大小为 N,同时更新 colorCount
  3. 返回结果
    • 最终返回 maxCount,即指定时间窗内经过的最多颜色的车辆数量。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 题目
  • 输入
  • 输出
    • 输入
    • 输出
    • 说明
    • 解题思路
    • 代码实现(Java)
    • 解释
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档