题目描述
小华和小薇一起通过玩积木游戏学习数学。
他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。
小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同目所处位置最远的2块积木块,计算他们的距离。
小薇请你帮忙替她解决这个问题。
输入
第一行输入为N,表示小华排成一排的积大总数。
接下来 N 行每行一个数字,表示小花排成一排的积大上数字。
输出
相同数字的积木的位置最远距离;
如果所有积木数字都不相同,请返回 -1
样例输入
5
1
2
3
1
4
样例输出
3
思路:
这属于一个简单题目了,我们只要边输入边判断改变即可。
首先,每种数字第一次出现的时机是需要记录下来的,因为我们是求间隔最长的两个相同元素的间隔长度。
其次就是遇见重复元素进行判断,更改最大值状态即可。
代码:
java
package Date3Point21;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/**
* 小华和小薇一起通过玩积木游戏学习数学。
* 他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。
* 小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同目所处位置最远的2块积木块,计算他们的距离。
* 小薇请你帮忙替她解决这个问题。
*/
public class MainB {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n = scanner.nextInt();
Map<Integer,Integer> map=new HashMap<>();
int count=1;
int maxLen=0;
while (count<=n){
int num= scanner.nextInt();
if(!map.containsKey(num)){
map.put(num,count);
}else{
Integer integer = map.get(num);
maxLen=maxLen<count-integer.intValue()?count-integer.intValue():maxLen;
}
count++;
}
if(maxLen==0){
System.out.println(-1);
}else{
System.out.println(maxLen);
}
}
}