一、题目描述
请找出数组中任意一个重复的数字
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。
示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
二、题目解析
注意题目描述:
一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的 范围内,这个 范围 恰好与数组的下标可以一一对应。
所以我们可以执行某种操作,使索引与值一一对应,即索引 0 的值为 0,索引 1 的值为 1。而一旦某个索引的值不只一个,则找到了重复的数字,也即发生了 哈希冲突。
三、参考代码
package LiKouTi;
import java.util.HashSet;
import java.util.Set;
/**
* arrays:传入的数组
* nums:存放数组元素的集合
* num:数组中的元素
*/
public class Repeat {
public static void main(String[] args) {
int[] arrays = new int[]{2,3,4,5,3,6};
System.out.println(findRepeatNumbers(arrays));
}
public static int findRepeatNumbers(int[] arrays){
//创建hashset集合,不会存储重复的元素
Set<Integer> nums = new HashSet<>();
for (int num : arrays) {
if(nums.contains(num)){
return num;
}else{
nums.add(num);
}
}
return -1;
}
}
运行结果:
思考:如果想输出所有重复的数字应该如何?
作者:Aimee.洁
本文版权归作者和CSDN共有,欢迎转载,未经作者同意必须保留此版声明,否则保留追究法律责任的权利。