华为OD机试 - 最多颜色的车辆 - 数据结构map(Java 2022Q4 100分)-LMLPHP

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

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

三种颜色编号为0 ,1 ,2

二、输入描述

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

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

三、输出描述

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

四、解题思路

1、核心思想

题读三遍,其义自见。

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

比如输入

0 1 2 2 1 0
4

4秒内经过的最多颜色的车辆数量。

4秒内经过了那几辆车:0 1 2 2

颜色最多的车辆是2,数量是2,即输出2。

2、题做多了,你就会发现,这道题属于送分题,为什么这样说?

  1. 题意简单
  2. 一看题目就秒懂,通过map实现即可

有的人可能想到滑动窗口+双指针,不麻烦吗?通过考试,拿满分才是王道。

算法嘛,能用简单的,绝不用复杂的。

3、具体解题思路:

  1. 遍历第一行输入的通过的车辆颜色信息;
  2. 遍历的长度是统计时间窗;
  3. 定义一个map,(key:每辆车的颜色信息,value:统计时间窗内出现的次数)。
  4. 获取map中值最大的值即输出结果。

五、Java算法源码

package com.guor.od;

import java.util.*;

public class OdTest02 {
    /**
     * 最多颜色的车辆
     * 输出指定时间窗内经过的最多颜色的车辆数量。
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 通过的车辆颜色信息[0,1,1,2] 代表4秒钟通过的车辆颜色分别是 0,1,1,2
        String[] arr = scanner.nextLine().split(" ");
        // 统计时间窗
        int number = Integer.valueOf(scanner.nextLine());

        /**
         * key:每辆车的颜色信息
         * value:统计时间窗内出现的次数
         */
        Map<String, Integer> map = new HashMap<String, Integer>();
        for (int i = 0; i < number; i++) {
            if (map.containsKey(arr[i])) {
                map.put(arr[i], map.get(arr[i]) + 1);
            } else {
                map.put(arr[i], 1);
            }
        }
        System.out.println(map);
        // 获取map中的最大值
        Integer max = 0;
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            if (entry.getValue() > max) {
                max = entry.getValue();
            }
        }

        // 觉得没意思,想秀一下演技,也可以这样,不过不建议这样写
        max = sortByValue(map);
        System.out.println(max);
    }

    /**
     * 获取map中的最大值
     */
    public static Integer sortByValue(Map<String, Integer> map) {
        List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                // 降序排列
                return (o2.getValue() - o1.getValue());
            }
        });
        System.out.println(list);
        return list.get(0).getValue();
    }
}

六、效果展示

1、输入

0 1 2 2 1 0
5

2、输出

2

华为OD机试 - 最多颜色的车辆 - 数据结构map(Java 2022Q4 100分)-LMLPHP


🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

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

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

华为OD机试 - 最多颜色的车辆 - 数据结构map(Java 2022Q4 100分)-LMLPHP

09-07 20:46