华为算法题:寻找最远相同数字积木距离-Java实现
5星 · 超过95%的资源 需积分: 5 125 浏览量
更新于2024-08-04
收藏 1KB MD 举报
本题是华为OD算法100分题,涉及一个有趣的积木游戏背景下的编程挑战。题目描述中,小华和小薇在学习过程中通过积木游戏来练习数学,积木上标有数字。玩家小华随机排列这些积木,小薇的任务是找出数字相同的积木中,位置最远的两块积木,并计算它们之间的距离。如果所有积木上的数字都不相同,则返回-1。
输入部分,首先读取一个整数N,表示积木的总数,然后接下来N行每个数字分别代表积木上的数字,范围限制在0到\(10^9\)之间,且积木数量不超过1000个。
输出则是两个数字相同的积木块之间的最远距离,如果找不到这样的积木对,则返回-1。
Java解法的核心思路是使用哈希映射(HashMap)来存储每个出现过的数字及其对应的索引(位置)。遍历过程中,对于每个新遇到的数字,检查它是否已经存在于哈希映射中,若存在则更新答案(最大距离),同时更新该数字在映射中的最近索引。最后输出答案。
下面是对Java代码的详细解释:
1. 首先创建一个`Scanner`对象sc,用于从标准输入读取数据。
2. 使用`nextInt()`方法读取积木的总数N。
3. 初始化一个`HashMap<Integer, Integer>`,即`indexMap`,用于存储每个数字及其出现的第一个位置。
4. 使用一个循环,从0到N-1:
- 读取一个积木上的数字x。
- 检查`indexMap`中是否已包含这个数字x,若不包含则将数字x和当前位置i存入映射,并设置初始最大距离ans为i。
- 若已包含数字x,说明找到了一个重复数字,更新最大距离ans为当前位置i与映射中对应位置的差值,取较大者。
5. 循环结束后,`ans`存储了最远的相同数字积木间的距离,将其打印到控制台。
总结来说,这是一个运用数据结构和算法解决问题的实际场景,考察了候选人在处理查找和更新操作时的数据结构优化能力,以及处理边界条件(如所有数字不同)的能力。通过编写Java代码,我们巧妙地利用哈希映射实现了一个高效的解决方案。
2024-05-31 上传
2024-09-02 上传
2024-05-17 上传
2024-02-24 上传
2024-05-08 上传
2024-05-08 上传
2024-05-08 上传
2024-05-08 上传
2024-05-05 上传
遇镜
- 粉丝: 25
- 资源: 11
最新资源
- SSM Java项目:StudentInfo 数据管理与可视化分析
- pyedgar:Python库简化EDGAR数据交互与文档下载
- Node.js环境下wfdb文件解码与实时数据处理
- phpcms v2.2企业级网站管理系统发布
- 美团饿了么优惠券推广工具-uniapp源码
- 基于红外传感器的会议室实时占用率测量系统
- DenseNet-201预训练模型:图像分类的深度学习工具箱
- Java实现和弦移调工具:Transposer-java
- phpMyFAQ 2.5.1 Beta多国语言版:技术项目源码共享平台
- Python自动化源码实现便捷自动下单功能
- Android天气预报应用:查看多城市详细天气信息
- PHPTML类:简化HTML页面创建的PHP开源工具
- Biovec在蛋白质分析中的应用:预测、结构和可视化
- EfficientNet-b0深度学习工具箱模型在MATLAB中的应用
- 2024年河北省技能大赛数字化设计开发样题解析
- 笔记本USB加湿器:便携式设计解决方案