华为OD机试 - 找出作弊的人(Java 2024 E卷 100分)

news2024/9/27 15:20:36

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

公司组织了一次考试, 现在考试结果出来了,想看一下有没有人存在作弊行为, 但是员工太多了, 需要先对员工进行一次过滤,再进一步确定是否存在作弊行为。

过滤的规则为:找到分差最小的员工ID对(p1, p2)列表,要求p1 < p2。

  1. 员工个数取值范围:0 < n < 100000
  2. 员工ID为整数,取值范围:0 <= n <= 100000
  3. 考试成绩为整数,取值范围:0 <= score <= 300

二、输入描述

员工的ID及考试分数

三、输出描述

分差最小的员工ID对(p1, p2)列表,要求p1 < p2。每一行代表一个集合,每个集合内的员工ID按顺序排列,多行结果也以员工ID对中p1值大小升序排列(如果p1相同则p2升序)。

四、测试用例

测试用例1:

1、输入

5
1 90
2 91
3 95
4 96
5 100

2、输出

1 2
3 4

3、说明

按照分数对员工进行排序,若分数相同,则按照员工ID排序。经过排序,员工的顺序如下:

[1, 90], [2, 91], [3, 95], [4, 96], [5, 100]

我们计算相邻员工的分数差,找到分差最小的情况:

  1. 员工1 和 员工2 的分数差:91 - 90 = 1
  2. 员工2 和 员工3 的分数差:95 - 91 = 4
  3. 员工3 和 员工4 的分数差:96 - 95 = 1
  4. 员工4 和 员工5 的分数差:100 - 96 = 4

最小分差为 1。

找到分差等于最小分差的员工对:

分差为 1 的员工对有两个:

  • 员工1 和 员工2(分数分别为 90 和 91,ID分别为 1 和 2)
  • 员工3 和 员工4(分数分别为 95 和 96,ID分别为 3 和 4)

因为已经按分数和ID排序,我们可以直接将员工对按照 p1 < p2 的顺序输出:

1 2
3 4

测试用例2:

1、输入

5
1 90
2 91
3 92
4 85
5 86

2、输出

1 2
2 3
4 5

3、说明

按照分数对员工进行排序,若分数相同,则按照员工ID排序。经过排序,员工的顺序如下:

[4, 85], [5, 86], [1, 90], [2, 91], [3, 92]

计算相邻员工的分数差,找到分差最小的情况:

  • 员工4 和 员工5 的分数差:86 - 85 = 1
  • 员工5 和 员工1 的分数差:90 - 86 = 4
  • 员工1 和 员工2 的分数差:91 - 90 = 1
  • 员工2 和 员工3 的分数差:92 - 91 = 1

最小分差为 1。

找到分差等于最小分差的员工对:

  • 员工4 和 员工5(分数分别为 85 和 86,ID分别为 4 和 5)
  • 员工1 和 员工2(分数分别为 90 和 91,ID分别为 1 和 2)
  • 员工2 和 员工3(分数分别为 91 和 92,ID分别为 2 和 3)

由于我们要按ID对升序排列输出,因此这些对已经按ID顺序排列,无需进一步排序,最终输出为:

1 2
2 3
4 5

五、解题思路

1、具体步骤:

使用一个二维数组 employees 来存储员工的ID和考试分数。然后按照分数进行排序,这样我们可以通过遍历相邻的员工来找到分数最小的差值对。

对员工按分数进行排序后,分差最小的一定在相邻的两个人之间。因此,我们只需要遍历排序后的员工列表,计算相邻员工分数的差值,找到最小差值并记录所有满足条件的员工ID对。

要求输出时 p1 < p2,即员工ID小的在前。如果两个员工ID相等,则按照ID大小输出。这通过在排序时按分数排列,之后处理ID对时可以自动确保输出顺序。

2、时间复杂度

排序:Arrays.sort 的时间复杂度是 O(n log n),其中 n 是员工数量。在最坏的情况下,n 可能达到 100,000。

遍历和计算分差:我们需要两次遍历员工数组来计算最小分差和找出满足条件的ID对,每次遍历的时间复杂度都是 O(n)。

结果排序:我们对找到的结果进行一次排序,时间复杂度是 O(m log m),其中 m 是最小分差的员工对数量。

因此,总的时间复杂度为 O(n log n),排序操作在这里占主导地位。

3、空间复杂度

二维数组:存储员工的ID和分数的数组的大小是 O(n),其中 n 是员工的数量。

列表 (List<int[]>):用于存储最小分差的员工ID对,其空间复杂度是 O(m),其中 m 是最小分差的员工对数量。

辅助空间:排序算法 Arrays.sort 使用 O(n) 的辅助空间来处理。

因此,空间复杂度为 O(n),因为我们只需存储员工ID和分数,外加一个列表存储结果。

六、Java算法源码

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

        // 读取员工个数
        int n = scanner.nextInt();
        int[][] employees = new int[n][2]; // 二维数组存储员工ID和分数

        // 读取员工ID和分数
        for (int i = 0; i < n; i++) {
            employees[i][0] = scanner.nextInt();  // 员工ID
            employees[i][1] = scanner.nextInt();  // 员工分数
        }

        // 调用方法处理并输出结果
        List<int[]> result = findCheatingPairs(employees);

        // 按照格式输出
        for (int[] pair : result) {
            System.out.println(pair[0] + " " + pair[1]);
        }

        scanner.close();
    }

    // 查找分差最小的员工对
    public static List<int[]> findCheatingPairs(int[][] employees) {
        List<int[]> result = new ArrayList<>();

        // 按分数排序,如果分数相同,则按员工ID排序
        Arrays.sort(employees, (a, b) -> {
            if (a[1] != b[1]) return a[1] - b[1];  // 按分数排序
            return a[0] - b[0];  // 如果分数相同,则按ID排序
        });

        // 找到最小分差
        int minDiff = Integer.MAX_VALUE;
        for (int i = 1; i < employees.length; i++) {
            int diff = employees[i][1] - employees[i - 1][1];
            minDiff = Math.min(minDiff, diff);
        }

        // 找到所有分差等于最小分差的对
        for (int i = 1; i < employees.length; i++) {
            int diff = employees[i][1] - employees[i - 1][1];
            if (diff == minDiff) {
                int p1 = Math.min(employees[i][0], employees[i - 1][0]);
                int p2 = Math.max(employees[i][0], employees[i - 1][0]);
                result.add(new int[] {p1, p2});
            }
        }

        // 按p1升序排序,如果p1相同则按p2排序
        result.sort((a, b) -> {
            if (a[0] != b[0]) return a[0] - b[0];
            return a[1] - b[1];
        });

        return result;
    }
}

七、效果展示

1、输入

5
1 60
2 65
3 70
4 75
5 85

2、输出

1 2
2 3
3 4

3、说明

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 E卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

JNI 详细介绍

一 介绍 java调⽤c&#xff0c;c代码可以通过JNIEnv执行java代码。 安卓NDK 已经对JNI环境进行了集成&#xff0c;我们可以通过android studio来快速搭建一个项目。 二 项目搭建 打开android studio 创建工程&#xff0c;创建工程选择模板Native C 三 模板格式介绍 生成的…

char 的整数存储解释

目录 1.原因讲解 1.有符号类型的char 2.无符号类型的char(0-255) 练习题1. 练习题2. 练习题3. 小心&#xff01;VS2022不可直接接触&#xff0c;否则&#xff01;没这个必要&#xff0c;方源面色淡然一把抓住&#xff01;顷刻炼化&#xff01; 1.原因讲解 1.有符号类型的…

AUTOSAR_EXP_ARAComAPI的5章笔记(6)

返回目录 5.3.5.5 Event-Driven vs Polling-Based access ara::com实现完全支持事件驱动和轮询的方式来访问新数据。 对于轮询方式&#xff0c;典型的用例是&#xff0c;一个应用程序被周期性地触发并在特定的截止时间前进行一些处理。这是调节器/控制算法的典型模式 —— 循…

如何清除KylinOS桌面操作系统桌面密钥环?

如何清除KylinOS桌面操作系统桌面密钥环&#xff1f; 1、问题现象2、解决 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、问题现象 打开桌面应用会出现【解锁秘钥环提示】&#xff1a; 2、解决 1、安装seahorse sudo apt-get insta…

【JavaEE】IP协议 应用层协议

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【Java】登神长阶 史诗般的Java成神之路 &#x1f576;️一.IP地址 IP协议&#xff08;Internet Protocol&#xff09;是TCP/IP协议族中最核心的协议之一&#xff0c;它定义了数据包在网络中传输的标准…

Word中插入当前日期与时间

Word中插入当前日期与时间 通过构建基块的方法快速插入当前日期与时间 快捷键操作 快捷键具体功能说明 Alt Shift D 插入当前日期date Alt Shift T 插如当前时间time Ctrl Shift F9 使得域文本变为正常文本 Ctrl F11 锁定域更新域菜单工具会变为黑色 C…

音视频入门基础:AAC专题(5)——FFmpeg源码中,判断某文件是否为AAC裸流文件的实现

一、引言 通过FFmpeg命令&#xff1a; ./ffmpeg -i XXX.aac 可以判断出某个文件是否为AAC裸流文件&#xff1a; 所以FFmpeg是怎样判断出某个文件是否为AAC裸流文件呢&#xff1f;它内部其实是通过adts_aac_probe函数来判断的。从《FFmpeg源码&#xff1a;av_probe_input_for…

Qt/C++ 了解NTFS文件系统,获取首张MFT表数据,解析文件记录头内容找到第一个属性偏移地址

系列文章目录 一、Qt/C 了解NTFS文件系统&#xff0c;了解MFT(Master File Table)主文件表&#xff08;一&#xff09; 二、Qt/C 了解NTFS文件系统&#xff0c;解析盘符引导扇区数据获取MFT(Master File Table)主文件表偏移地址 三、Qt/C 了解NTFS文件系统&#xff0c;获取首张…

还在为企微联系人烦恼?一招解决!企业微信2024年效率升级全攻略

现在信息多得让人眼花&#xff0c;微信里头那些企业微信的联系人是不是让你头疼&#xff1f; 看着满屏的绿色头像&#xff0c;心里想&#xff1a;“我就想和朋友聊聊天&#xff0c;怎么就这么难&#xff1f;”别急&#xff0c;今天教你个办法&#xff0c;轻松搞定这些小烦恼&am…

【无标题】达瓦达瓦

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

胤娲科技:解锁AI奥秘——产品经理的智能进化之旅

当AI不再是遥不可及的科幻 想象一下&#xff0c;你走进一家未来感十足的咖啡厅&#xff0c;无需言语&#xff0c;智能咖啡机就能根据你的偏好调制出一杯完美的拿铁&#xff1b; 打开手机&#xff0c;AI助手不仅提醒你今天有雨&#xff0c;还贴心推荐了最适合雨中漫步的音乐列表…

C语言中的GCC的优化和数组的存放方式、Cache机制、访问局部性

“我们仍需共生命的慷慨与繁华相爱&#xff0c;即使岁月以刻薄和荒芜相欺” 文章目录 前言文章有误敬请斧正 不胜感恩&#xff01;第一题&#xff1a;***什么是gcc&#xff1a;***C 语言中&#xff0c;“gcc -O2”是使用 GCC 编译器时的一个编译选项。第一部分&#xff1a;为什…

利用yolov8模型实现的西红柿成熟程度检测系统包含源码+配置说明(基于YOLOv8的西红柿成熟程度检测系统)

西红柿成熟程度的检测对于农业生产尤为重要&#xff0c;可以提高收获效率和产品质量。本项目利用YOLOv8&#xff08;You Only Look Once v8&#xff09;模型实现了一个高效的西红柿成熟程度检测系统。该系统可以自动识别西红柿的颜色&#xff0c;从而判断其成熟程度。 关键特性…

pycharm从VCS获取项目报错unable to access:Recv failure:Connection was reset

&#xff08;已老实求放过&#xff09; 版本&#xff1a;PyCharm Community Edition 2024.2.1 【解决办法】取消Git的网络代理&#xff0c;在目标路径所在文件夹处右键选择Git Bash Here&#xff0c;输入以下命令&#xff1a; git config --global --unset http.proxy git …

2024最新版零基础学习Modbus通信协议(保姆级教程)

合集 - 上位机开发(2) 1.零基础学习Modbus通信协议09-13 2.RS485与ModbusRTU09-10 收起 大家好&#xff01;我是付工。 2012年开始接触Modbus协议&#xff0c;至今已经有10多年了&#xff0c;从开始的懵懂&#xff0c;到后来的顿悟&#xff0c;再到现在的开悟&#xff0c;…

STM32的寄存器深度解析

目录 一、STM32 寄存器概述 二、寄存器的定义与作用 三、寄存器分类 1.内核寄存器 2.外设寄存器 四、重要寄存器详解 1.GPIO 相关寄存器 2.定时器相关寄存器 3.中断相关寄存器 4.RCC 相关寄存器 五、寄存器操作方法 1.直接操作寄存器 2.使用库函数操作寄存器 六…

4个方法教你图片转PDF怎么弄。

我们有时候会接触了一些重要的图片文件或者资料&#xff0c;想要装换成可编辑的PDF格式&#xff0c;更方便自己管理。这时候就会需要转换的工具&#xff0c;我这里就有&#xff14;款可以完成这种转换的高效工具可以分享给大家。 1、365PDF转换软件 直通车&#xff1a;www.pdf…

软件设计之JavaWeb(3)

软件设计之JavaWeb(3) 此篇应在MySQL之后进行学习: 路线图推荐&#xff1a; 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷全新JavaWeb教程&#xff0c;企业主流javaweb技术栈 资料可以去尚硅谷官网免费领取 此章节最好学完JDBC观看 学习内容&#xff1a; 请求转发…

jenkins流水线+k8s部署springcloud微服务架构项目

文章目录 1.k8s安装2.jenkins安装3.k8s重要知识1.简介2.核心概念3.重要命令1.查看集群消息2.命名空间3.资源创建/更新4.资源查看5.描述某个资源的详细信息6.资源编辑7.资源删除8.资源重启9.查看资源日志10.资源标签 4.k8s控制台1.登录2.界面基本操作1.选择命名空间2.查看命名空…

损耗金属件检测系统源码分享

损耗金属件检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…