一、题目描述
小华和小薇一起通过玩积木游戏学习数学。
他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。
小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同且所处位置最远的2块积木块,计算他们的距离。
小薇请你帮忙替解决这个问题。
二、输入描述
第一行输入为N,表示小华排成一排的积木总数。
接下来N行每行一个数字,表示小华排成一排的积木上数宇。
三、输出描述
相同数宇的积木的位置最远距离;
如果所有积木数字都不相同,请返回-1。
四、补充说明
0<=积木上的数字<109
1<=积木长度<=105
四、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
int n = Integer.parseInt(line);
// 缓存
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
int max = -1;
for (int i = 0; i < n; i++) {
// 下一个数
int num = Integer.parseInt(sc.nextLine());
if (map.containsKey(num)) {
// 计算两个相同的数之间的距离
int distance = i - map.get(num);
// 与之前的相同的数之间的距离作比较,取最大距离
max = Math.max(distance, max);
}else {
// 如果集合中不存在,则放入集合,值为当前位置
map.put(num, i);
}
}
System.out.println(max);
}
五、效果展示
1、输入
5
1
2
3
2
1
2、输出
4
3、说明
很明显,距离最远的相同的数是1。
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。