华为OD机试 2023B卷题库疯狂收录中,刷题点这里
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
在一个狭小的路口,每秒只能通过一辆车,假设车辆的颜色只有 3 种,找出 N 秒内经过的最多颜色的车辆数量。
三种颜色编号为0 ,1 ,2
第一行输入的是通过的车辆颜色信息[0,1,1,2] ,代表4 秒钟通过的车辆颜色分别是 0 , 1 , 1 , 2
第二行输入的是统计时间窗,整型,单位为秒
输出指定时间窗内经过的最多颜色的车辆数量。
输出指定时间窗内经过的最多颜色的车辆数量。
题读三遍,其义自见。
在一个狭小的路口,每秒只能通过一辆车,假设车辆的颜色只有 3 种,找出 N 秒内经过的最多颜色的车辆数量。
比如输入
0 1 2 2 1 0
4
4秒内经过的最多颜色的车辆数量。
4秒内经过了那几辆车:0 1 2 2
颜色最多的车辆是2,数量是2,即输出2。
有的人可能想到滑动窗口+双指针,不麻烦吗?通过考试,拿满分才是王道。
算法嘛,能用简单的,绝不用复杂的。
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();
}
}
0 1 2 2 1 0
5
2
下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。