您的位置: 题酷首页 » 所有题目 » 判断数组中是否有重复元素


判断数组中是否有重复元素


0
0
4 答
886 看

一个数组,下标从0到n,元素为[0,n]的整数

请写个函数判断其中是否有重复元素。

要求空间复杂度O(1),时间复杂度O(n)

面试题算法
2009/10/05 by 半瓶墨水 4个月前更新 更新记录



1

利用原数组中元素取负作为标志,标志哪个数曾出现过,例如: A[i]=25,则A[25]*=-1,因此下次遇到A[j]=25时,则到A[25]中发现A[25]<0表示25这个数曾出现过,因此重复

另外,如果只是判断有无重复的数,只要所有元素求和,判断是否等于n(n+1)/2即可briversong, 5个月前
@briversong: 和好像不够吧,比如{0,2,2,2}{0,1,2,3}和是一样的。fbird, 5个月前
1 恩 “只要所有元素求和,判断是否等于n(n+1)/2”,只能判断有两个重复的数briversong, 5个月前
0

设f(n)=0^1^2^...^n^a[0]^...^a[n]
判断f(n)是否为0,如果不为0肯定有至少一个重复的元素

如果有个重复怎么办?多个重复也会造成“异或”为0的情况半瓶墨水, 4个月前
1 我没想到例子。你举个例子吧caibaiyin, 4个月前
1 是我错了···1 1 2 2就是一个例子····caibaiyin, 4个月前
0

又来一个解法,从0开始,如果a[0]=x,那么将x放在a[x]中(放进去之前进行一次比较),原来的a[x]为y的话,就将y元素放在a[y]里,就这么一直下去,每一次这么做的时候进行一下是否相等的比较,如果遇到相等则有重复,如果一直到了n步仍然没有重复,则就没有重复的元素

有可能走不完n步的,几个来回循环也有可能半瓶墨水, 4个月前
0

用bit数组
把a[0-n]每个数字的最高位作为bit数组


250x

参与回答

 提示:如不是回答问题,请采用发表评论形式! (比如针对题目或者某个回复的意见、建议)

注册登录后再回答