华为OD机试真题 Java 实现【找出通过车辆最多颜色】【2023Q1 100分】,附详细解题思路

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

  • 专栏福利:限时订阅49.9,订阅后可加入华为OD刷题群,获得哪吒优先答疑机会(华为OD刷题指导,远程代码调试),群里大佬众多可以抱团取暖,群友刷题经验分享,考试经验分享。

在这里插入图片描述

一、题目描述

在一个狭小的路口,每秒只能通过一辆车,假如车辆的颜色只有3种,找出n秒内经过的最多颜色的车辆数量。

三种颜色编号为0、1、2。

二、输入描述

第一行输入的是通过的车辆颜色信息 [0 1 1 2] 代表4秒钟通过的车辆颜色分别是0 1 1 2;

第二行输入的是统计时间窗,整型,单位为秒。

三、输出描述

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

四、解题思路

  1. 输入车辆颜色集合;
  2. 输入统计时间窗;
  3. 定义一个map,存储不同颜色的车的个数;
  4. 先初始化窗口,i相当于右指针;
  5. 如果已经存在此颜色,则再次+1;
  6. 如果首次出现,则为1;
  7. 当超出统计时间窗,取出脱离窗口的车型颜色;
  8. 如果map中已经存在,则-1;
  9. 算下时间窗内,相同车型出现的最大个数;

五、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    // 车辆颜色集合
    String[] arr = sc.nextLine().split(" ");
    // 统计时间窗
    int n = Integer.parseInt(sc.nextLine());

    // 不同颜色的车的个数
    Map<Integer, Integer> map = new HashMap<Integer, Integer>();

    int max = 0;
    // 先初始化窗口,i相当于右指针
    for (int i = 0; i < arr.length; i++) {
        // 车辆颜色
        int color = Integer.parseInt(arr[i]);
        // 如果已经存在此颜色,则再次+1
        if(map.containsKey(color)){
            map.put(color,map.get(color)+1);
        }else{
            // 如果首次出现,则为1
            map.put(color,1);
        }

        if (i >= n) {
            // 左指针,右指针-窗口大小
            int left = i - n;
            // 取出脱离窗口的车型颜色
            int leftColor = Integer.parseInt(arr[left]);
            // 如果map中已经存在,则-1
            if(map.containsKey(leftColor)){
                map.put(leftColor,map.get(color)-1);
            }
        }
        // 算下时间窗内,相同车型出现的最大个数
        max = Math.max(map.get(color), max);
    }
    System.out.println(max);
}

六、效果展示

1、输入

0 1 2 0 2 2 1
4

2、输出

3

3、说明

一共7台车,肉眼可见,4秒内通过最多的车是2,一共3台,故输出3。

华为OD机试真题 Java 实现【找出通过车辆最多颜色】【2023Q1 100分】,附详细解题思路_第1张图片


下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法

本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(搬砖工逆袭Java架构师,华为od,java,华为,程序人生,学习)