数组中重复的数字
在长度为n的数组中,所有数字都是0~n-1的。不知道有几个重复数字,也不知道每个重复数字重复几次。请找出其中任意一个重复数字。
方法一:
哈希表。
缺点:时间复杂度(n)空间复杂度(n)
方法二:
我们尝试重排这个数组。将元素 i 放到第 i 个位置上。那么如果存在重复元素必然有的位置上会有多个元素,有的位置没有元素。
例如:数组【2,3, 1, 0, 2, 5, 3】
我们先考察第 0 个元素 2 ,此时我们看到第 2 个位置的元素是 1 ,和 2 不相等,将 2 与第 2 个位置的元素互换。【1,3, 2, 0, 2, 5, 3】
再考察第 0 个元素 1,我们看到第 1 个位置的元素是 3 ,和 1 不相等,将 1 与第 1 个位置的元素互换。【3,1, 2, 0, 2, 5, 3】
再考察第 0 个元素 3,我们看到第 3 个位置的元素是 0 ,和 3 不相等,将 3 与第 3 个位置的元素互换。【0,1, 2,3, 2, 5, 3】
现在第 0 个元素为 0,扫描下一个元素 第 1 个元素为 1 。扫描下一个元素 第 2 个元素为 2。扫描下一个元素 第 3 个元素为 3。
扫描下一个元素。第 4 个元素为 2 ,查找第 2 个位置,发现也是 2 所以就找到了其中一个重复数字。算法结束。