3:数组中重复的数字

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

class solution:
    def duplicate(self,list,duplication):
        for x in range(len(list)):
            while list[x] != x:
                if list[list[x]] == list[x]:
                    duplication.append(list[x])
                    return True
                else:
                    list[list[x]],list[x] = list[x],list[list[x]]
            return False

#这样的话就可以不用开辟空间,减少空间复杂度。算是最完美的解决方法

衍生题目:

如果不能修改数组呢?
1.用辅助数组,不过要增加o(n)的辅助空间
2.用找个数的方法:在1到n之间,找出中间的数m,把原数组分成两组,1到m和m+1到n。在1到m中,统计每个数总共在原数组中出现的次数,若大于m,则在1到m中有数重复了,以此类推,类似二分法查找,找出重复值

发布了16 篇原创文章 · 获赞 0 · 访问量 157

猜你喜欢

转载自blog.csdn.net/qq_43275748/article/details/102657786