华为OD机试 - 相同数字的积木游戏 1(Python)| 解题思路+核心知识点

本文介绍了华为OD机试中的一道积木游戏问题,要求找到数字相同的最远积木块并计算距离。解题思路包括使用字典统计数字频率,若所有数字不同则返回-1,否则找出最多出现次数的数字,计算其位置差。核心知识点涉及双指针和内置函数max的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相同数字的积木游戏 1

题目

小华和小薇一起通过玩积木游戏学习数学。
他们有很多积木,每个积木块上都有一个数字,
积木块上的数字可能相同。
小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同且所处位置最远的 2 块积木块,计算他们的距离。
小薇请你帮忙替她解决这个问题。

输入

第一行输入为 N ,表示小华排成一排的积木总数。
接下来 N 行每行一个数字,表示小花排成一排的积木上数字。

输出

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

示例一

输入

5
1
2
3
1
4

输出

3

示例二

输入

2
1
2

输出

-1

备注

0 <= 积木上的数字 < 10^9
1 <= 积木长度 <= 10^5

解题思路

该题的思路是求出数组中数字出现最多的数字,以及该数字的出现次数。

  • 首先,定义了一个字典 num_count 用于存储数组中的每个数字出现的次数,对数组进行遍历,如果该数字未出现在字典中,则将其记录在字典中,如果该数字已出现在字典中,则将其记录的次数加一。

  • 如果字典的长度等于数组的长度,说明数组中的数字不重复,直接返回 -1。否则,遍历字典,对于每个出现次数大于等于 2 的数字,在数组中寻找该数字第一次出现的位置和最后一次出现的位置,并用它们的差值与当前的 maxLen 取最大值。

  • 最后返回 maxLen。

核心知识点

双指针(two pointers):利用双指针求出数组中重复数字出现的最长区间长度。

内置函数 max 的使用:使用 max 函数取得数组中重复数字出现的最长区间长度的最大值。

Python 代码实现

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想橡皮擦

如有帮助,来瓶可乐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值