华为OD机试 - 积木最远距离(Python/JS/C/C++ 2024 E卷 100分)

在这里插入图片描述

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

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。

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

一、题目描述

小华和小薇一起通过玩积木游戏学习数学。

他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。

小华随机拿一些积木块并排成一排,请你帮她找到这排积木中相同数字且所处位置最远的2块积木,计算它们的距离,小薇请你帮忙着地解决这个问题。

二、输入描述

第一行输入为N,表示小华排成一排的积木总数。

接下来N行每行一个数字,表示小华排成一排的积木上数字。

三、输出描述

相同数字的积木块位置最远距离;如果所有积木块的数字都不相同,请返回-1。

备注

0 <= 积木上的数字 < 109

1 <= 积木长度 <= 105

四、测试用例

测试用例1:

1、输入

5
1
2
3
1
4

2、输出

3

3、说明

共有5个积木,第1个和第4个积木数字相同,其距离为3。

测试用例2:

1、输入

2
1
2

2、输出

-1

3、说明

共有两个积木,没有积木数字相同,返回-1。

测试用例3:

1、输入

6
5
1
5
2
5
3

2、输出

4

3、说明

数字5在索引0、2、4出现。最大距离是4 - 0 = 4。

五、解题思路

为了找到一排积木中相同数字且位置最远的两块积木,我们可以采用以下步骤:

  1. 遍历积木序列:我们需要遍历整个积木序列,记录每个数字第一次出现的位置。
  2. 记录第一次出现的位置:使用一个哈希表(HashMap)来存储每个数字第一次出现的索引位置。
  3. 计算距离:当我们再次遇到已经存在于哈希表中的数字时,计算当前索引与第一次出现的索引之间的距离,并更新最大距离。
  4. 输出结果:遍历完成后,如果找到了至少一对相同数字的积木,输出最大的距离;否则,输出-1。

这种方法的时间复杂度为O(N),适用于N高达10^5的情况。

六、Python算法源码

# 导入必要的模块
import sysdef main():# 读取输入N = int(sys.stdin.readline())  # 读取积木总数Nfirst_occurrence = {}  # 初始化哈希表,用于存储数字第一次出现的位置max_distance = -1  # 初始化最大距离为-1for i in range(N):num = int(sys.stdin.readline())  # 读取当前积木上的数字if num in first_occurrence:# 计算当前索引与第一次出现索引之间的距离distance = i - first_occurrence[num]if distance > max_distance:max_distance = distance  # 更新最大距离else:# 记录数字第一次出现的位置first_occurrence[num] = i# 输出结果print(max_distance)if __name__ == "__main__":main()

七、JavaScript算法源码

// 导入读取输入的模块
const readline = require('readline');function main() {const rl = readline.createInterface({input: process.stdin,output: process.stdout});let input = [];rl.on('line', (line) => {input.push(line);});rl.on('close', () => {let N = parseInt(input[0]); // 读取积木总数Nlet firstOccurrence = new Map(); // 初始化哈希表let maxDistance = -1; // 初始化最大距离为-1for (let i = 0; i < N; i++) {let num = BigInt(input[i + 1]); // 读取当前积木上的数字,使用BigInt处理大数if (firstOccurrence.has(num)) {// 计算当前索引与第一次出现索引之间的距离let distance = i - firstOccurrence.get(num);if (distance > maxDistance) {maxDistance = distance; // 更新最大距离}} else {// 记录数字第一次出现的位置firstOccurrence.set(num, i);}}// 输出结果console.log(maxDistance);});
}main();

八、C算法源码

#include <stdio.h>
#include <stdlib.h>// 定义哈希表的大小
#define HASH_SIZE 100003// 定义哈希表节点结构
typedef struct Node {long long key; // 数字int value; // 第一次出现的位置struct Node* next; // 指向下一个节点的指针
} Node;// 哈希函数
int hash_func(long long key) {return key % HASH_SIZE;
}int main(){int N;scanf("%d", &N); // 读取积木总数N// 初始化哈希表Node* hash_table[HASH_SIZE];for(int i=0;i<HASH_SIZE;i++) {hash_table[i] = NULL;}int maxDistance = -1; // 初始化最大距离为-1for(int i=0; i<N; i++) {long long num;scanf("%lld", &num); // 读取当前积木上的数字int hash_index = hash_func(num); // 计算哈希值Node* current = hash_table[hash_index];int found = 0;while(current != NULL){if(current->key == num){// 计算当前索引与第一次出现索引之间的距离int distance = i - current->value;if(distance > maxDistance){maxDistance = distance; // 更新最大距离}found = 1;break;}current = current->next;}if(!found){// 插入新的节点到哈希表Node* newNode = (Node*)malloc(sizeof(Node));newNode->key = num;newNode->value = i;newNode->next = hash_table[hash_index];hash_table[hash_index] = newNode;}}// 输出结果printf("%d\n", maxDistance);// 释放内存for(int i=0;i<HASH_SIZE;i++) {Node* current = hash_table[i];while(current != NULL){Node* temp = current;current = current->next;free(temp);}}return 0;
}

九、C++算法源码

#include <iostream>
#include <unordered_map>
using namespace std;int main() {ios::sync_with_stdio(false); // 关闭同步,加快输入速度cin.tie(0); // 取消cin和cout的绑定int N;cin >> N; // 读取积木总数Nunordered_map<long long, int> firstOccurrence; // 初始化哈希表int maxDistance = -1; // 初始化最大距离为-1for (int i = 0; i < N; i++) {long long num;cin >> num; // 读取当前积木上的数字if (firstOccurrence.find(num) != firstOccurrence.end()) {// 计算当前索引与第一次出现索引之间的距离int distance = i - firstOccurrence[num];if (distance > maxDistance) {maxDistance = distance; // 更新最大距离}} else {// 记录数字第一次出现的位置firstOccurrence[num] = i;}}// 输出结果cout << maxDistance << "\n";return 0;
}

🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

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

在这里插入图片描述

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

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

相关文章

MQTT--EMQX入门+MQTTX使用

目录 1、什么是EMQX&#xff1f;1.1 EMQX介绍1.2 EMQX特点1.3 与物联网之间的关系以及主要的产品主要的产品 2、安装启动2.1 基本命令2.2 目录结构 3、MQTTX客户端3.1 连接配置 总结PS: 1、什么是EMQX&#xff1f; 首先你得有MQTT的知识&#xff0c;不认识MQTT的小伙伴可以先看…

如何初步部署自己的服务器,达到生信分析的及格线2(待更新)

参考我的上一篇博客https://blog.csdn.net/weixin_62528784/article/details/142621762?spm1001.2014.3001.5501&#xff0c; 现在我们已经有了一个能够跑一些基础任务的、基本没有配置的服务器了&#xff0c;接下来要做的任务就是&#xff1a; &#xff08;1&#xff09;进一…

单片机毕业设计选题基于单片机的炉温度控制系统

** 文章目录 前言概要功能设计设计思路效果图 程序文章目录 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们…

深拷贝浅拷贝 JS代码实现

文章目录 JS数据类型深拷贝 & 浅拷贝赋值和浅拷贝的区别浅拷贝&#xff08;Shallow Copy&#xff09;代码实现 深拷贝&#xff08;Deep Copy&#xff09;代码实现 Map & WeakMap示例 WeakMap 和垃圾回收weakmap处理循环引用 typepf & instanceof JS数据类型 基本数…

满填充透明背景二维码生成

前几天项目上线的时候发现一个问题&#xff1a;通过Hutool工具包生成的二维码在内容较少时无法填满(Margin 已设置为 0)给定大小的图片。因此导致前端在显示二维码时样式异常。 从图片中我们可以看到&#xff0c;相同大小的图片&#xff0c;留白内容是不一样的。其中上半部分…

dwceqos网络驱动性能优化

文章介绍 本文会介绍优化QNX系统下io-pkt-v6-hc驱动模块cpu loading过高问题&#xff0c;经过优化可以降低约一半的cpu loading. 问题背景 激光雷达通过以太网发送数据到ADAS域控中&#xff0c;测试发现在激光功能激活的情况下&#xff0c;会出现比较明显的网络丢帧现象。 …

平安养老险深圳分公司积极开展“金融教育宣传月”活动,展现金融为民新风尚

2024年9月&#xff0c;平安养老险深圳分公司以“金融为民谱新篇&#xff0c;守护权益防风险”为主题&#xff0c;正式启动2024年“金融教育宣传月”活动&#xff0c;通过多样化开展进乡村、进商圈、进企业等宣传教育活动&#xff0c;将金融消保知识送达广大消费者身边&#xff…

光通信——PON技术

PON网络结构 PON&#xff08;Passive Optical Network&#xff0c;无源光网络&#xff09;系统的基本组成包括OLT&#xff08;Optical Line Terminal&#xff0c;光线路终端&#xff09;、ODN&#xff08;Optical Distribution Network&#xff0c;光分配单元&#xff09;和ON…

数据结构——队列的基本操作

前言 介绍 &#x1f343;数据结构专区&#xff1a;数据结构 参考 该部分知识参考于《数据结构&#xff08;C语言版 第2版&#xff09;》24~28页 &#x1f308;每一个清晨&#xff0c;都是世界对你说的最温柔的早安&#xff1a;ૢ(≧▽≦)و✨ 目录 前言 1、队列的基本概念…

Oracle 闪回版本(闪回表到指定SCN)

1.创建目录 mkdir /u01/app/oracle/flash 2.配置FRA alter system set db_recovery_file_dest_size15G; alter system set db_recovery_file_dest/u01/app/oracle/flash; 3.设置闪回参数--确保可以闪回48h内的数据库 alter system set db_flashback_retention_target2880; 4…

中关村环球时尚产业联盟 东晟时尚产业创新中心成立

2024年9月6日&#xff0c;中关村环球时尚产业联盟与东晟时尚创新科技&#xff08;北京&#xff09;有限公司于中关村科技园东城园举行了隆重的战略合作签约仪式。 中关村科技园东城园领导发表了致辞&#xff0c;并表示东城区作为首都北京的核心区域&#xff0c;拥有深厚的历史…

SW - 装配图旋转到一个想要的正视图

文章目录 SW - 装配图旋转到一个想要的正视图概述笔记将装配图旋转到自己想要的视图的方法保存当前视图选择自己保存的视图END SW - 装配图旋转到一个想要的正视图 概述 在弄装配图。 如果按照SW默认的视图&#xff0c;Y方向是反的。 原因在于我画零件图时&#xff0c;方向就…

从“抄袭”到“原创”:5个超实用的论文降重技巧!

AIPaperGPT&#xff0c;论文写作神器~ https://www.aipapergpt.com/ 每当写完一篇论文&#xff0c;松了一口气准备庆祝时&#xff0c;突然想到还有一个名叫“查重”的终极大Boss等着你&#xff0c;瞬间心情从云端跌入谷底。 是不是你&#xff1f; 很多同学在提交之前&#…

fatfs API使用手册

配置 /*---------------------------------------------------------------------------/ / Configurations of FatFs Module /---------------------------------------------------------------------------*/#define FFCONF_DEF 80286 /* Revision ID *//*---------------…

Spring IoC笔记

目录 1.什么是 IoC&#xff1f; 2.IoC类注解&#xff08;五大注解&#xff09; 2.1那为什么要这么多类注解&#xff1f; 2.2五大注解是不是可以混用&#xff1f; 2.3程序被spring管理的条件是&#xff1f; 3.bean对象 3.1Bean 命名约定 3.2获取bean对象 4.⽅法注解 B…

业绩由盈转亏,全面冲刺大模型的360值得期待吗?

在中国互联网市场上&#xff0c;360无疑是一家大家家喻户晓的公司&#xff0c;从安全软件起家&#xff0c;360的服务已经延展到了市场的方方面面&#xff0c;就在最近360的财报正式公布&#xff0c;很多人都在问360的财报该怎么看&#xff1f;全面冲刺大模型的360值得我们期待吗…

uniapp中uni.request的统一封装 (ts版)

文章目录 前言一、我们为什么要去封装&#xff1f;二、具体实现1.创建一个请求封装文件&#xff1a;2.封装 uni.request&#xff1a;3.如何去使用&#xff1f; 总结 前言 在uniapp中如何去更简洁高效的发送我们的请求&#xff0c;下面就介绍了uni.request()二次封装。 一、我们…

目标检测应用场景—数据集【NO.37】纺织物缺陷检测数据集

写在前面&#xff1a;数据集对应应用场景&#xff0c;不同的应用场景有不同的检测难点以及对应改进方法&#xff0c;本系列整理汇总领域内的数据集&#xff0c;方便大家下载数据集&#xff0c;若无法下载可关注后私信领取。关注免费领取整理好的数据集资料&#xff01;今天分享…

AI大模型面试大纲

大纲 1. 介绍和背景 自我介绍&#xff08;5分钟&#xff09; 了解候选人的教育背景、工作经历和对大模型架构的兴趣。 2. 基础理论和概念&#xff08;30分钟&#xff09; 机器学习基础 解释基本概念&#xff0c;如监督学习、无监督学习和强化学习。 讨论不同的模型类型&#xf…

【Iceberg分析】调研Iceberg中表的原地演变

调研Iceberg中表的原地演变 文章目录 调研Iceberg中表的原地演变原生非分区表文件关系图表的原地演变之表schema演变新增字段new_column文件关系变化图为新增字段写入数据文件关系变化图删除新增字段文件关系变化图新增字段new_column2文件关系变化图删除数据文件关系变化图 原…