目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 1、核心思想
- 2、题做多了,你就会发现,这道题属于送分题,为什么这样说?
- 3、具体解题思路:
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为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、题做多了,你就会发现,这道题属于送分题,为什么这样说?
- 题意简单
- 一看题目就秒懂,通过map实现即可
有的人可能想到滑动窗口+双指针,不麻烦吗?通过考试,拿满分才是王道。
算法嘛,能用简单的,绝不用复杂的。
3、具体解题思路:
- 遍历第一行输入的通过的车辆颜色信息;
- 遍历的长度是统计时间窗;
- 定义一个map,(key:每辆车的颜色信息,value:统计时间窗内出现的次数)。
- 获取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机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。