百度&必应权4, 日IP8000. 查看详情
自助收录

2023年华为OD机考真题:找出通过车辆最多颜色

算法刷题2年前 (2023)更新 江南白衣
481 0 0
2023年华为OD机考真题:找出通过车辆最多颜色

全网最全面的华为OD机试真题汇总,100%原题题库,不需要开会员即可查看全部内容,更多考题请查看真题库。

真题库:https://www.yuque.com/codernav.com/od

题目:找出通过车辆最多颜色
知识点:滑动窗口
时间限制:1s 空间限制:256MB 限定语言:不限
题目描述:
在一个狭小的路口,每秒只能通过一辆车,假如车辆的颜色只有3种,找出N秒内经过的最多颜色的车辆数量
三种颜色编号为0,1,2
输入描述:
第一行输入的是通过的车辆颜色信息
[0,1,1,2] 代表4秒钟通过的车辆颜色分别是0,1,1,2
第二行输入的是统计时间窗,整型,单位为秒
输出描述:
输出指定时间窗内经过的最多颜色的车辆数量
示例1
输入:
0 1 2 1
3
输出:
2
说明:
在[1,2,1]这个3秒时间窗内,1这个颜色出现2次,数量最多
示例2
输入:
0 1 2 1
2
输出:
1
说明:
在2秒时间窗内,每个颜色最多出现1次
解题思路:
题目规定只有3种颜色。我们可以使用长度为3的整数数组表示。
当颜色为0,ints[0]++;
当颜色为1,ints[1]++;
当颜色为2,ints[2]++;

代码实现一:

/**
 * @title 找出通过车辆最多颜色
 * @Description 在一个狭小的路口,每秒只能通过一辆车,假如车辆的颜色只有3种,找出N秒内经过的最多颜色的车辆数量
 * 三种颜色编号为0,1,2
 * @Author 开发者导航
 * @website https://codernav.com
 * @date 2023/5/13
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] strs = sc.nextLine().split(" ");
        int n = sc.nextInt();
        int res = 0;
        for (int i = 0; i < strs.length - n + 1; i++) {
            int[] ints = new int[3];        //只有3种颜色,可以转化成长度3的数组
            for (int j = i; j < i + n; j++) {
                int index = Integer.parseInt(strs[j]);
                ints[index]++;
            }
            int maxCount = Arrays.stream(ints).max().getAsInt();
            res = Math.max(res, maxCount);
        }
        System.out.println(res);
    }
}

代码实现二:

package com.codernav.demo.hwod.exam;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @title 找出通过车辆最多颜色
 * @Description 在一个狭小的路口,每秒只能通过一辆车,假如车辆的颜色只有3种,找出N秒内经过的最多颜色的车辆数量
 * 三种颜色编号为0,1,2
 * @Author 开发者导航
 * @website https://codernav.com
 * @date 2023/5/13
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        int count = sc.nextInt();
        final String[] arr = line.split(" ");
        int max = 0;
        Map<String, Integer> map = new HashMap<>();
        for (int i = 0; i < arr.length; i++) {
            if (i >= count) {
                String key = arr[i - count];
                map.put(key, map.get(key) - 1);
            }
            Integer integer = map.get(arr[i]);
            if (integer == null) {
                map.put(arr[i], 1);
            } else {
                map.put(arr[i], integer + 1);
            }
            integer = map.get(arr[i]);
            if (integer > max) {
                max = integer;
            }
        }
        System.out.println(max);
    }
}

 

© 版权声明

相关文章

暂无评论

暂无评论...