一、题目描述
在一个狭小的路口,每秒只能通过一辆车,假如车辆的颜色只有3种,找出n秒内经过的最多颜色的车辆数量。
三种颜色编号为0、1、2。
二、输入描述
第一行输入的是通过的车辆颜色信息 [0 1 1 2] 代表4秒钟通过的车辆颜色分别是0 1 1 2;
第二行输入的是统计时间窗,整型,单位为秒。
三、输出描述
输出指定时间窗内经过的最多颜色的车辆数量。
四、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
String str = sc.nextLine();
// 统计时间窗
int n = Integer.parseInt(str);
// 车辆颜色集合
String[] arr = line.split(" ");
// 不同颜色的车的个数
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)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。