最近我在接受采访时被问到这个问题:
在排序数组中查找重复数字的最有效方法是什么?
我的回答是基于使用带键的哈希表作为数组元素和数组中的重复次数作为值;迭代数组并更新哈希表。最后,可以检查哈希表中具有count>的元素。 1;那些是重复的元素。
有更好的方法吗?
感谢。
答案 0 :(得分:3)
嗯,你可以用O(1)
的空格来做这件事。由于它是一个排序数组,所有你需要做的就是用下一个数字减去当前数字。如果结果为0
,则表示您有重复的数字。
答案 1 :(得分:2)
使用下一个元素检查数组中的每个元素(最后一个元素除外),如果它们相等,则停止并退出:您已找到重复的元素。它的工作原理是因为数组是排序的,它不需要任何额外的空间,在最坏的情况下(没有重复的元素)它将是O(n),因为所有的数组都必须被遍历。
答案 2 :(得分:0)
- 排序数组
- 找出相邻指数值之间的差异
- 如果差值为0,则重复并记下索引
答案 3 :(得分:-1)
public static int searchrepeativeVal(int a[]){
int left =0;
int right= a.length;
int mid;
while (right-left>1){
mid= (left+right)/2;
if(a[mid]!=mid+1){
if(a[mid]== mid){
return mid;
}else{
right=mid;
}
}else{
if(a[mid]==mid ){
return mid;
}else{
left =mid;
}
}
}
return -1;
}