这是一道谷歌的面试题,一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空间和O(n)时间
这题目的难点就是他的限制条件,只能是o(1)的空间和o(n)的时间,所以我们不能使用hashmap来统计重复的值,但是可以使用Hashmap的思想,
根据题目,我们可以把给定的数组当做一个hashmap,利用基数排序的方式找到重复的数。
分析思路如下:
下面以2,4,1,5,7,6,1,9,0,2这十个数为例,展示下如何用基数排序来查找重复元素。
下标 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
数据 |
2 |
4 |
1 |
5 |
7 |
6 |
1 |
9 |
0 |
2 |
(1)由于第0个元素a[0] 等于2不为0,故交换a[0]与a[a[0]]即交换a[0]与a[2]得:
下标 |
0 |
1 |
2 |
3 |
4 |
5 |