解一、
最先涌现的想法是遍历一遍数组,用hash表记录每一个数字出现的次数;
用空间换时间
解二、
剑指offer解法
重新排序数组每个数字,当扫描到数字m的时候判断下标为i的数字是否等于m:如果是,就寻找下一个;如果不是,就判断下标为m的对应的数字是否等于m,如果它与第m个数字相等,就等于找到了一个重复的数字,如果不相等就把第i个数与第m个数交换位置,把m放在其对应的下标m的位置。
例如:
首先给定数组arr[] = {2, 3, 0, 1, 3}。因为数组中最大的数是n-1,那就一个萝卜一颗坑。从0号下标位置开始,0号元素为2,不等于0,交换0号和2号位置,数组变为:
{0, 3, 2, 1, 3}。再比较0号位置,下标和值相等,往后走到1号下标元素为3,不等于1,交换1号和3号,变成:{0, 1, 2, 3, 3}。再继续,下标来到4号位置,发现元素下标与值不相等,比较4号和3号下标位置,发现元素相等,返回3即可。
---------------------
作者:askunix_hjh
来源:CSDN
原文:https://blog.csdn.net/m0_37925202/article/details/81415825
版权声明:本文为博主原创文章,转载请附上博文链接!
解三、
根据区间数字个数,判断是否有重复数字。
比如:统计小于5的数字个数——有6个数字,那么就有重复的。因为小于5的数字只有:0,1,2,3,4 五个。
(但我觉得这个是特例,如果小于5的数字有五个但是0,0,0,0,0呢?)