本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。
在一个狭小的路口,每秒只能通过一辆车,假如车辆的颜色只有3种,找出n秒内经过的最多颜色的车辆数量。
三种颜色编号为0、1、2。
第一行输入的是通过的车辆颜色信息 [0 1 1 2] 代表4秒钟通过的车辆颜色分别是0 1 1 2;
第二行输入的是统计时间窗,整型,单位为秒。
输出指定时间窗内经过的最多颜色的车辆数量。
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);
}
0 1 2 0 2 2 1
4
3
一共7台车,肉眼可见,4秒内通过最多的车是2,一共3台,故输出3。
下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法
本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。