首页 > 编程语言 >【华为OD机试真题】A卷-优秀学员统计(JAVA)

【华为OD机试真题】A卷-优秀学员统计(JAVA)

时间:2024-04-01 23:34:13浏览次数:23  
标签:10 JAVA 真题 int OD 员工 util 打卡 id

一、题目描述

【华为OD机试真题】A卷-优秀学员统计(JAVA)

题目描述:

公司某部门软件教导团正在组织新员工每日打卡学习活动,他们开展这项学习活动已经一个月了,所以想统计下这个月优秀的打卡员工。

每个员工会对应一个id,每天的打卡记录记录当天打卡员工的id集合,一共30天。

请你实现代码帮助统计出打卡次数tp5的员工。加入打卡次数相同,将较早参与打卡的员工排在前面,如果开始参与打卡的时间还是一样,将id较小的员工排在前面。

注:不考虑并列的情况,按规则返回前5名员工的id即可,如果当月打卡的员工少于5人,按规则排序返回所有有打卡记录的员工id.

二、输入输出

输入描述:
第一行输入为新员工数量N,表示新员工编号id为0到N-1,N的范围为[1,100]
第二行输入为30个整数,表示每天打卡的员工数量,每天至少有1名员工打卡.
之后30行为每天打卡的员工id集合,id不会重复。
输出描述:
按顺序输出打卡top5员工的id,用空格隔开。

三、参考示例

示例1:
输入:
11
4 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2
0 1 7 10
0 1 6 10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
10
6 10
7 10
输出:
10 0 1 7 6
说明: 员工编号范围为0~10,id为10的员工连续打卡30天,排第一,id为0,1,6,7的员工打卡都是两天,id为0,1,7的员工在第一天就打卡,比id为6的员工早,排在前面,0,1,7按id升序排列,所以输出[10,0,1,7,6]

四、解题思路

  1. 读取新员工数量、每天打卡的员工数量和打卡记录。
  2. 创建一个映射employeeInfo,用于记录每位员工的打卡次数和首次打卡的索引。
  3. 将映射信息转换为列表employeeList,以便排序。
  4. 使用Lambda表达式对员工列表按照打卡次数和首次打卡index进行排序。
  5. 输出前5个员工的ID。

五、参考代码

/*
 * @Author: mgc
 * @Date: 2024-02-02 17:47:00
 * @LastEditors: Do not edit
 * @LastEditTime: 2024-02-02 17:48:55
 */

// import java.util.*;
// import java.util.HashMap;
// import java.util.Scanner;
// import java.util.regex.Matcher;
// import java.util.stream.Stream;
// import java.util.regex.Pattern;
// import java.util.stream.Collectors;

import java.util.Scanner;
import java.util.*;

class Main {
    public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);
        // 新员工数量
        int numEmployees = in.nextInt();

        // 每天打卡的员工数量
        int[] employeeCounts = new int[30];
        for (int i = 0; i < 30; i++) {
            employeeCounts[i] = in.nextInt();
        }

        // 打卡记录
        int[][] employeeIds = new int[30][];
        for (int i = 0; i < 30; i++) {
            employeeIds[i] = new int[employeeCounts[i]];
            for (int j = 0; j < employeeCounts[i]; j++) {
                employeeIds[i][j] = in.nextInt();
            }
        }

        // 员工信息映射,key为员工ID,value为打卡记录信息:[打卡次数,首次打卡index]
        HashMap<Integer, Integer[]> employeeInfo = new HashMap<>();

        for (int i = 0; i < employeeIds.length; i++) {
            for (int id : employeeIds[i]) {
                if (employeeInfo.containsKey(id)) {
                    employeeInfo.get(id)[0]++;
                } else {
                    employeeInfo.put(id, new Integer[]{1, i});
                }
            }
        }

        // 将映射信息转到列表中,以便后续排序
        ArrayList<Integer[]> employeeList = new ArrayList<>();
        for (Integer id : employeeInfo.keySet()) {
            employeeList.add(new Integer[]{id, employeeInfo.get(id)[0], employeeInfo.get(id)[1]});
        }

        // 根据打卡次数和首次打卡index进行排序
        employeeList.sort((a, b) ->
                a[1].equals(b[1]) ? (a[2].equals(b[2]) ? a[0] - b[0] : a[2] - b[2]) : b[1] - a[1]);

        // 输出前5个员工的ID
        for (int i = 0; i < (employeeList.size() >= 5 ? 5 : employeeList.size()); i++) {
            System.out.print(employeeList.get(i)[0] + " ");
        }
    }
}

六、华为OD机试真题汇总目录

    【华为OD机试】真题汇总A+B+C+D券(Python实现)

    【华为OD机试】真题汇总A+B+C+D卷(JAVA实现)

    【华为OD机试】真题汇总A+B+C+D卷(C++实现)

标签:10,JAVA,真题,int,OD,员工,util,打卡,id
From: https://blog.csdn.net/u014481728/article/details/137233544

相关文章

  • 【华为OD机试真题】A卷-预定酒店(JAVA)
    一、题目描述【华为OD机试真题】A卷-预定酒店(JAVA)题目描述:放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的数组A),他的心理价位是x元,请帮他筛选出k个最接近x元的酒店(n>=k>0),并由低到高打印酒店的价格二、输入输出输入描述:第一行:n,k,x......
  • java基础
                    ......
  • PLC通过modbus转profinet网关连接湿度传感器操作步骤
    Modbus转Profinet网关可以连接不同系统和设备,有些现场需要实时监测环境参数,但大由于当时环境仪表设备不能达到直连效果,通过Modbus转Profinet网关,湿度传感器的数据可以被准确、可靠地传输到监控系统中,为生产运作提供全面的数据支持。  Modbus转Profinet网关接湿度传感器的操作......
  • GitHub上标星120k的Java进阶面试教程等!(建议收藏
    转发+关注,然后私信回复关键字“888”即可获得我精心整理的《Java开源项目合集》资料八、《JavaFamily》==============【互联网一线大厂面试+学习指南】进阶知识完全扫官。 部分目录:九、《interview_internal_reference》==================================2......
  • 2024最新分享我的面经总结:Java面试技术点攻略(九大核心专题
    关于操作系统这一部分,其实问的内容并不多,主要是因为这一部分问来问去也都是那么几个同样的问题,例如线程通信,线程与进程区别,进程调度算法以及虚拟内存、物理内存等。所以,在这一方面,我也整理了一些相对核心的内容。核心三:MySQL=========MySQL就更不用多说了,数据库不问......
  • Java中的信号量Semaphore
    引言:        在Java编程中,信号量Semaphore是一种重要的同步工具,用于控制对共享资源的访问。本文将详细介绍信号量Semaphore的概念、用法以及一些示例。一、什么是信号量Semaphore?        信号量Semaphore是一种用于控制多个线程访问共享资源的同步工具。......
  • MySQL提升笔记(4)InnoDB存储结构(1)
    innoDB存储引擎中,常见的页类型有:✅数据页(B-treeNode)✅undo页(undoLogPage)✅系统页(SystemPage)✅事务数据页(TransactionSystemPage)✅插入缓冲位图页(InsertBufferBitmap)✅插入缓冲空闲列表页(InsertBufferFreeList)✅未压缩的二进制大对象页(Uncompres......
  • Hadoop——HDFS文件系统的Java API操作
    2.7.4org.apache.hadoophadoop-hdfs2.7.4org.apache.hadoophadoop-client2.7.4junitjunit4.12IDEA会自动保存文件并且导入依赖包,点击右侧的Maven,展开Dependencies,可以看到四个依赖包以及导入进来了三、初始化我们通过junit来进行测试,首先创建一个类,添加如下内......
  • 2024JAVA互联网各大BATJ大厂(网易、华为
    ​为什么报了这个部门?​你觉得自己有什么优势,能给这个部门带来什么?​讲自己的三个优点?​说一下自己的不足?​。。。今日头条(抖音,收到意向书)​牛客网视频平台面试,算法题在线编程一下午走完三面流程。不涉及部门面试,面试官说三轮面试都是统招的。​一面(约......
  • vscode开发flutter
    Flutter开发app配置国内镜像,或使用vpn,文档在中国网络环境下使用Flutter|Flutter中文文档-Flutter中文开发者网站-Flutter先从官网下载AndroidStudio,下载完成后,命令行运行flutterdoctor指令将检查Windows完整的Flutter开发环境的所有组件。显示缺少......