1个100万长度的整型数组中,只有两个元素是一样的,如何在最短时间找出这个元素来? 可以不考虑空间影响。

来源:百度知道 编辑:UC知道 时间:2024/05/11 12:07:51
能否用O(1)时间复杂度内找到这个元素?
首先建立了一个hash表,每个key对应的位置存放的value是出现过的次数?
我把表建好后,怎么找出哪个位置上出现了2次?

哈希查找~~~

用哈希函数构建哈希表,哈希函数可以采用除留余数法,采用开散列还是闭散列可以根据情况来定

由于哈希函数是有元素键直接映射到存储地址,这样只需要做1、2次比较就能够找到数据,非常高校,但这是以牺牲空间为代价的

时间复杂度就是O(1)......我确定,楼上不要误导

关于 你补充 的 问题 :
首先,hash表是键直接到地址的映射,就是说只要你给定一个需要查找的键值,通过hash函数就直接能够得到其存储地址。 哈希表里面存放的是数据本身,而不是其出现次数(这道题我觉得这样比较好)

对于查找2个相同的元素,这两个相同的元素一定会映射到相同的地址。如果哈希函数选的足够好,使得每一个不同的键值都对应不同的地址,那么只需要在建立哈希表的过程中,记录哪个数值出现了哈希冲突就行了,这个数值就一定是出现过两次(或2次以上)的那个数

如果是单纯的建立好表后的查找,要保证为O(1),那么就在建标时记录产生哈希冲突的那个地址,然后查找 时直接访问这个地址,从对应链表中读值就好了

那是不可能的。。。。因为光验证这个数是最小数就必须要O(n)的复杂度。

------------------------------
我上面确实看错题了。。

但是你们说用hash来做,但是现在hash表都没有建立,你那么说实际上就是把建立hash的那些时间都不算上(这个需要o(n)的时间)。。。。这么弄还有什么意义呢???

如果要那么说,那还不如干脆这么说:因为100万是个给定的数。所以是常数,那当然可以在O(1)的时间内找出。。。这样是不是更流氓?

当然能了