问题
长度为n的数组中存放着n个数字,每个数字的范围都在0~n-1中。找出数组中的重复数字。
暴力法
1.标志数组
最容易想到的就是暴力方法,那么如何暴力破解呢,最容易想到的就是新建一个标志数组,扫描数组中每个元素,每扫到一个元素,就将标志数组中该索引的值置为1,于是流程就变成先检查对应的标志是否为1,若已经为1了,就找到重复数字
2.哈希表
利用哈希表,送头到尾扫描数组,当你扫描到一个数字的时候,在O1时间内判断是否已经在哈希表中,从而找出重复数字
3.排序
将数组排序之后很容易找到重复数字
交换
若没有重复数字,那么下标为i的元素的值一定为i,那么就可以从头遍历数组,若a[i]!=i,就去找下标为a[i]的元素的实际的值,如果这个值等于a[i],那么就找到了重复数字,如果不等,就将二者交换,这样下标为a[i]的元素实际值就成了a[i]。继续比较下去,就能找到重复数字。