Advertisement

找出数组中的重复数字(几种方法来节省空间复杂度)

阅读量:

题目一: 在一个包含n个元素的数组中,所有数值均位于0至n-1的区间内。数组中存在若干重复的数值,但无法确定具体有多少个数值出现了重复,也无法明确每个数值重复的次数。请从数组中找出任意一个重复出现的数值。例如,当输入一个长度为7的数组{2, 3, 1, 0, 2, 5, 3}时,对应的重复数值可以是2或3。

算法思想解析

对数组进行排序时,要求数组中的每个元素(数字)与其对应的下标值相等。在没有重复元素的情况下,每个元素与下标之间能够实现一一对应的关系。如果存在重复元素,则必然会出现某个下标对应多个元素的情况。
然而根据设定规则,每个下标只能存储一个元素,因此必定存在至少一个下标,其对应的元素值与该下标的数值不一致。
如何确定这个特定的下标:
只要发现某个下标i处的数值与其对应的元素值不相等,就可以令j等于arr[i]。若此时出现arr[j]等于arr[i]且同时等于j的情况,即说明下标j所对应的数值与其位置相匹配,这表明该位置才是arr[i]应当被放置的位置。但由于该位置已被其他元素占据,因此可以确认arr[j]与arr[i]为相同的数值,从而识别出重复的元素。
此方法的时间复杂度为O(n),空间复杂度则为O(1)。

python代码实现

复制代码
    #一个长度为n的数组,数组里的元素范围是0

全部评论 (0)

还没有任何评论哟~