最多颜色的车【C语言】

/*
题目内容
在一个狭小的路口,每秒只能通过一辆车,假好车辆的颜色只有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;
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值