您的位置:首页 > 其它

50、数组中重复的数字

2018-02-13 22:56 155 查看
题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

思路:两种方法:

1、用到辅助空间,空间复杂度为O(n)。

2、利用题中数组的特点(数组中的元素小于数组长度),优点是空间复杂度为O(1),缺点是会改变原数组。

方法一

public boolean duplicate(int numbers[],int length,int [] duplication) {
if(length <= 0) return false;
HashSet<Integer> hashSet = new HashSet<>();
for (int i = 0; i < length; i++) {
if (!hashSet.add(numbers[i])) {
duplication[0] = numbers[i];
return true;
}
}
return false;
}


方法二

public boolean duplicate(int numbers[],int length,int [] duplication) {
if(length <= 0) return false;
for (int i = 0; i < length; i++) {
int index = Math.abs(numbers[i]);
if (numbers[index] < 0) {
duplication[0] = index;
return true;
}
numbers[index] = 0 - numbers[index];
}
return false;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: