如何在华为OD机试中获得满分?Java实现【优秀学员统计】一文详解!

news2024/12/24 2:33:59

请添加图片描述

✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)

文章目录

  • 1. 题目描述
    • 2. 输入描述
    • 3. 输出描述
    • 4. Java算法源码
    • 5. 测试
    • 6.解题思路

1. 题目描述

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

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

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

2. 输入描述

第一行输入为新员工数量N,表示新员工编号id为0到N-1,N的范围为[1,100];
第二行输入为30个整数,表示每天打卡的员工数量,每天至少有1名员工打卡;
之后30行为每天打卡的员工id集合,id不会重复;

3. 输出描述

按顺序输出打卡top5员工的id,用空格隔开。

补充:同一天打卡的员工没有时间上早晚的区别。不保证所有员工都会打卡。排名只针对有打卡记录的员工。

4. Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    // 新员工数量N
    int N = Integer.valueOf(sc.nextLine());
    // 每天打卡的员工数量
    int[] clockArr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();

    Map<Integer, int[]> map = new HashMap<>();
    // 之后30行为每天打卡的员工id集合,id不会重复;
    for (int i = 0; i < 30; i++) {
        for (int j = 0; j < clockArr[i]; j++) {
            int input = sc.nextInt();
            if (input > N - 1) {
                continue;
            }
            int[] temp = new int[2];
            if (map.containsKey(input)) {
                temp = map.get(input);
                ++temp[1];
            } else {
                temp[0] = i;
                temp[1] = 1;
            }
            map.put(input, temp);
        }
    }

    List<Map.Entry<Integer, int[]>> mapList = new ArrayList<>(map.entrySet());
    mapList.sort((a, b) -> {
        // 按打卡次数排序
        if (b.getValue()[1] < a.getValue()[1]) {
            return -1;
        } else if (b.getValue()[1] == a.getValue()[1]) {
            // 天数相同的第一次打卡时间靠前
            if (b.getValue()[0] > a.getValue()[0]) {
                return -1;
            }
        }
        return 1;
    });

    StringBuilder builder = new StringBuilder();
    // //小于5的取所有,大于5的只取5
    for (int i = 0; i < (Math.min(mapList.size(), 5)); i++) {
        builder.append(mapList.get(i).getKey()).append(" ");
    }
    System.out.println(builder.substring(0, builder.length() - 1));
}

5. 测试

在这里插入图片描述

6.解题思路

为了解决这个问题,我们可以按照以下步骤进行操作:

  1. 读取新员工数量N。
  2. 读取30个整数,表示每天的打卡员工数量。
  3. 创建一个HashMap,用于存储员工的打卡信息。键为员工ID,值为一个长度为2的整数数组,数组的第一个元素表示员工第一次打卡的日期,第二个元素表示员工的打卡次数。
  4. 遍历每天的打卡信息:
    • 对于每天的打卡信息,读取员工的ID集合。
    • 遍历员工的ID集合,更新HashMap中对应员工的打卡信息。如果员工已存在于HashMap中,则更新其打卡次数;否则,在HashMap中添加员工的打卡信息,包括第一次打卡的日期和打卡次数。
  5. 将HashMap中的打卡信息转换为List,并根据打卡次数和第一次打卡日期进行排序。
  6. 按照题目要求,输出前5名员工的ID。

该算法的时间复杂度为O(N),其中N是新员工的数量。因为我们需要遍历30天的打卡信息,并更新HashMap中的员工打卡信息。排序的时间复杂度为O(NlogN),取决于HashMap转换为ListList的排序操作。最终的空间复杂度为O(N),取决于HashMap和List的存储空间。

以下是解题思路的Mermaid思维导图:
在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/570408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++是如何从代码到游戏的

有一个Student类。C怎么创建一个学生类的对象&#xff1f; // 嗯我会&#xff01;有两种方式&#xff1a; Student s; Student *s2 new Student("张三");现在这学生的行为有&#xff1a;吃饭&#xff0c;睡觉&#xff0c;上网课。现在你执行个上网课的行为&#xf…

chatgpt赋能python:Python取数简介

Python取数简介 Python是一款强大的编程语言&#xff0c;可以轻松地处理各种数据类型并进行数据分析。Python的强大功能也使其成为数据科学和机器学习等领域非常受欢迎的编程语言。在这篇文章中&#xff0c;我们将探讨在Python中如何取数。 Python中的取数 Python中有多种方…

C#,码海拾贝(24)——线性方程组求解的复系数方程组的全选主元高斯-约当消去法之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary> …

delphi11.3的WebBrower支持Edge

看到此消息后&#xff0c;立即下载了DelphiCE&#xff08;社区版&#xff09; 安装&#xff0c;创建项目&#xff0c;放TWebBrowers&#xff0c;TButton 配置参数为EdgeOnly F9运行&#xff0c;没反应 配置参数为EdgeIfAvailable F9运行&#xff0c;提示浏览器版本过低 全网搜索…

chatgpt赋能python:Python取两者之间的最大值

Python取两者之间的最大值 介绍 Python是一种高级编程语言&#xff0c;广泛应用于计算机科学、人工智能、数据科学、机器学习等不同领域。它的易用性和灵活性使它成为许多开发人员首选的工具。本篇文章将介绍如何使用Python来取两者之间的最大值。 如何取两者之间的最大值 …

URP自定义屏幕后处理

回到目录 大家好&#xff0c;我是阿赵。这次来说一下URP渲染管线里面怎样使用后处理效果&#xff0c;还有怎样去自定义后处理效果。 一、使用URP自带的后处理效果 要使用URP自带的后处理效果&#xff0c;方法很简单&#xff0c;和Unity内置渲染管线的PostProcessing后处理很…

如何在Linux中更改SSH端口?

SSH&#xff08;Secure Shell&#xff09;是一种安全的远程登录协议&#xff0c;它允许您通过网络远程连接到Linux系统并进行管理操作。默认情况下&#xff0c;SSH使用22端口进行通信。然而&#xff0c;为了增强系统的安全性&#xff0c;有时候我们需要更改SSH端口&#xff0c;…

chatgpt赋能python:Python分解——探究Python语言的精髓

Python分解——探究Python语言的精髓 Python作为一种动态解释性语言&#xff0c;逐渐成为数据科学和人工智能领域的“标配”。Python语言的优势不仅在于其简洁而直观的语法&#xff0c;更在于其开源庞大的生态系统。而Python分解&#xff0c;则是将Python语言的优势、拆分并深…

chatgpt赋能python:Python内连接的重要性

Python内连接的重要性 在数据分析和机器学习领域&#xff0c;内连接是一种非常重要的概念&#xff0c;用于筛选和分析不同数据集之间的共同项。Python语言的强大功能和广泛的库可以帮助我们轻松地实现内连接。在本文中&#xff0c;我们将介绍Python内连接的基础知识、实现方式…

chatgpt赋能python:Python分组:组织你的代码,提升可读性和可维护性

Python 分组: 组织你的代码&#xff0c;提升可读性和可维护性 在编写代码时&#xff0c;组织良好的代码结构和架构是非常重要的。对于大规模的项目&#xff0c;特别是多人合作开发的项目来说&#xff0c;代码管理和组织是至关重要的。Python 分组是一种常用的技术&#xff0c;…

css高级技巧

1. 精灵图 index.png 分析图 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title…

chatgpt赋能python:Python单行if语句

Python 单行 if 语句 在 Python 编程中&#xff0c;条件语句 if 是一个非常重要的控制流语句&#xff0c;它的主要作用是根据条件的真假来决定程序的走向。在编写 Python 代码时&#xff0c;经常会遇到需要在某些情况下只执行一行代码的情况。这时&#xff0c;就可以使用 Pyth…

chatgpt赋能python:Python取出列表数字

Python 取出列表数字 如果你是一名 Python 开发者&#xff0c;并且你需要从一个列表中取出数字&#xff0c;那么你来到了对的地方。 介绍 Python 是一门很流行的编程语言&#xff0c;它有很多内置函数和库&#xff0c;可以帮助你快速地完成各种任务。在 Python 中&#xff0…

使用yolov5实现图片分类

文章目录 开始之前下载依赖数据集下载新建配置文件执行训练模型选择训练完成测试模型进行预测自定义模型下载数据集下载地址分享问题 开始之前 你应当先克隆这个仓库 git clone https://github.com/ultralytics/yolov5 # clone下载完毕后&#xff0c;进入克隆的仓库目录 cd …

Linux系统静态IP配置(CentOS)

刚刚装好的Linux系统&#xff08;Ubuntu版本&#xff09;通过ifconfig&#xff08;如果是CentOS版本需要使用ipaddr&#xff09;之后没有发现IP地址 首先在Linux终端通过su root指令进入root用户下获得管理员权限&#xff0c;之后进入cd /etc/sysconfig/network-scripts目录中 …

Linux命令(23)之cat

Linux命令之cat 1.cat介绍 linux命令cat用于把文件内容显示在标准输出设备&#xff08;即&#xff1a;显示器&#xff09;上&#xff0c;也可以(单个/几个)文件内容追加别的文件当中去。 2.cat用法 cat [参数] [文件名称] cat命令常用参数 参数说明-b对所有非空输出进行编号…

大数据 | 实验四:并行化数据挖掘算法设计

文章目录 &#x1f4da;实验目的&#x1f4da;实验平台&#x1f4da;实验内容&#x1f4da;实验步骤&#x1f407;KNN介绍&#x1f407;并行化&#x1f955;在本地编写程序和调试&#x1f955;在集群上提交作业并执行 &#x1f407;非并行化 &#x1f4da;实验目的 机器学习和…

chatgpt赋能python:Python切换输入法:实现更高效的编程

Python 切换输入法&#xff1a;实现更高效的编程 对于有多国语言需求的程序员来说&#xff0c;切换输入法是日常编程的基本操作之一。Python是一门广泛使用的编程语言&#xff0c;对于那些使用中文输入法的开发者来说&#xff0c;如何高效地切换输入法是一个需要考虑的问题。 …

chatgpt赋能python:Python去噪——提高图像质量的神器

Python去噪——提高图像质量的神器 介绍 随着科技的发展&#xff0c;我们的生活被数字化&#xff0c;许多信息都被存储在数字化设备中。这些设备会允许我们拍摄照片、视频和录音等多媒体文件。然而&#xff0c;在实际应用中&#xff0c;多媒体数据通常存在一些问题&#xff0…

chatgpt赋能python:Python加噪声:让你的数据更真实,更可靠

Python加噪声&#xff1a;让你的数据更真实&#xff0c;更可靠 Python作为一种开源高级编程语言&#xff0c;使得加噪声变得非常简单。加噪声是为了让数据更真实、更可靠&#xff0c;防止数据中的过拟合现象。那么本文将介绍Python添加噪声的基本概念和它的具体实现方法。 什…