/*
题目内容
在一个狭小的路口,每秒只能通过一辆车,假好车辆的颜色只有3种,找出N秒内经过的最多颜色的车辆数量。
三种颜色编号为0,1,2
输入描述
第一行输入的是通过的车辆颜色信息
[0,1,1,2]代表4秒钟通过的车辆颜色分别是0,1 ,1 ,2
第二行输入的是统计时间窗,整型,单位为秒
输出描述
输出指定时间窗内经过的最多颜色的车辆数量。样例
样例一:
输入
0 1 2 1
3
输出
2
样例解释
在3秒时间窗内,每个颜色最多出现2次。例为︰[1,2,1]
样例二:
输入
0 1 2 1
2
输出
1
样例解释
在2秒时间窗内,每个颜色最多出现1次
*/
#include <stdio.h>
#include <stdlib.h>
#define MIN(a, b) ((a) < (b)) ? (a) : (b)
#define MAX(a, b) ((a) > (b)) ? (a) : (b)
int main () {
int car_count[3] = {0};//注意要初始化,不初始化数组内部元素是随机值,导致结果错误
int cars[10000];
int n = 0; //n用来记录车辆数量
while(1) {
scanf("%d",&cars[n]);
n++;
if( getchar() == '\n') {//不知道输入数据有多少个时可以用getchar
break;
}
}
int window_size;
scanf("%d", &window_size);
//测试输入
// for(int i = 0; i < n; i++){
// printf("%d ", cars[i]);
// }
// printf("\n");
// printf("%d", window_size);
// printf("\n");
// printf("%d", n);
// printf("\n");
//测试结束
//第一个窗口初始化
for (int i=0; i < window_size; i++) {
car_count[cars[i]]++;
}
//获得第一个窗口的同色车数量最大值
int max_res = MAX(MAX(car_count[0], car_count[1]), car_count[2]);
//滑动窗口
for (int i = window_size; i < n; i++) {
//窗口向右移动一位,相当于原窗口内部最左边的元素删除,添加一个元素到窗口最右边
//所以新添加元素对应的车辆数量+1,删除元素对应的车辆数量-1
car_count[cars[i]] += 1;
car_count[cars[i-window_size]] -= 1;
//每次移动窗口取一次最大值
max_res = MAX(max_res, MAX(MAX(car_count[0], car_count[1]), car_count[2]));
}
printf("%d", max_res);
return 0;
}
最多颜色的车【C语言】
于 2023-03-10 18:49:48 首次发布