题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
解决方案
1、最简单的办法就是把输入的数组排序,然后从头到尾扫描数组很容易地找出重复的数字。时间复杂度为O(nlogn)。
2、利用哈希表,从头到尾按顺序扫描数组的每个数字,每扫描到一个数字,都可以用O(1)的时间来判断哈希表里是否包含该数字。如果不包含,就把它加入,如果包含,就找到了一个重复的数字。时间复杂度为O(n),但需要额外的一个O(n)的哈希表。
3、利用类似于桶排序的原理,数组中的所有数字都为0到n-1,可以把这些数字当做数组下标,数值用来统计个数,