数组中重复的数字

在长度为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 所以就找到了其中一个重复数字。算法结束。

posted @ 2019-10-14 17:28  yangzixiongh  阅读(115)  评论(0编辑  收藏  举报