哈希完成面向offer.03
先初始化一个哈希表 (HashSet)
然后遍历每一个元素,分别对每一个元素做如下的处理:
先判断哈希表中是否存在这个元素
如果存在的话,则说明这个元素重复,则直接返回
否则,将这个元素加入到哈希表中
public int findRepeatNumber(int[] nums) {
// 初始化一个哈希表
Set<Integer> set = new HashSet<>();
for (int i = 0; i < nums.length; i++) {
//判断当前元素是否已经存在
if (set.contains(nums[i])) {
// 如果存在,则直接返回
return nums[i];
}
// 否则的话,将当前元素放入到哈希表中
set.add(nums[i]);
}
return -1;
}
法2
数组完成
数组中每个元素的大小在 0 ~ n - 1 的范围内。利用这个信息,我们就可以使用数组代替上面方案二的哈希表,主要的思路是:
定义一个长度为 n 的数组 bucket,然后将所有的元素初始化为 -1
在查找处理的时候,使用原数组的元素作为 bucket 的下标,原数组元素对应的下标作为 bucket 的元素值。
public int findRepeatNumber(int[] nums) {
// 1. 初始化一个数组
int[] bucket = new int[nums.length];
Arrays.fill(bucket, -1);
for (int i = 0; i < nums.length; i++) {
// 2. 判断当前元素是否已经存在
if (bucket[nums[i]] != -1) {
// 如果存在,则直接返回
return nums[i];
}
// 否则的话,将当前元素作为索引,当前元素的下标作为值,填入数组中,
// 方便后续的查找判重
bucket[nums[i]] = i;
}
return -1;
}
算法查重
最新推荐文章于 2023-12-29 11:07:26 发布