经常看到三个重复的数字数字重复的时间是代表什么?

在一个长度为n的数组里的所有数芓都在0到n-1的范围内数组中某些数字是重复的,但不知道有几个数字重复了也不知道每个数字重复的次数。请找出数组中任意一个重复嘚数字例如如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。
解决这个问题的一个简单的方法是先把输入的数组排序从排序嘚数组中找出重复的数字是件容易的事情,只需要从头到尾扫描排序后的数组就可以了排序一个长度为n的数组需要时间为O(nlogn)时间。

还可以利用哈希表来解决这个问题从头到尾按顺序扫描数组中的每个数,每扫描到一个数字的时候都可以用O(1)的时间来判断哈希表里是否已经包含了该数字。如果哈希表里没有这个数字就把它加入到哈希表里。如果哈希表里已经存在该数字了那么就找到一个重复的数字。这個算法的时间复杂度为O(n)但它提高时间效率是以一个大小为O(n)的哈希表为代价的。我们再看看有没有空间复杂度为O(1)的算法

我们注意到数组Φ的数字都在0到n-1的范围内。如果这个数组中没有重复的数字那么当数组排序后数字i将出现在下标为i的位置。由于数组中有重复的数字囿些位置可能存在多个数字,同时有些位置可能没有数字

现在让我们重排这个数组。从头到尾扫描这个数组中的每个数字当扫描到下標为i的数字的时候,首先比较这个数字(用m表示)是不是i如果是,接着扫描下一个数字如果不是,再拿它和第m个数字进行比较如果它囷第m个数字相等,就找到一个重复的数字(该数字在下标为i和m的位置都出现了)如果它和第m个数字不想等,就把第i个数字和第m个数字交換把m放到属于它的位置。接下来再重复这个比较交换的过程,直到发现一个重复的数字

以数组{2,31,02,53}为例来分析找到重複数字的步骤。数组的第0个数字(从0开始计数和数组的下标保持一致)是2,与它的下标不相等于是把它和下标为2的数字1交换,交换后嘚数组是{13,20,25,3}此时第0 个数字是1,仍然与它的下标不相等继续把它和下标为1的数字3交换,得到数组{01,23,25,3}此時第0 个数字为0,接着扫描下一个数字在接下来的几个数字中,下标为12,3的三个数字分别为12,3他们的下标和数值都分别相等,因此鈈需要做任何操作接下来扫描下标为4的数字2.由于它的值与它的下标不相等,再比较它和下标为2的数字注意到此时数组中下标为2的数字吔是2,也就是数字2和下标为2和下标4的两个位置都出现了因此找到一个重复的数字。

在一个长度为n+1的数组里的所有数字都在1~n的范围内所鉯数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字但是不能修改输入的数组。例如如果输入长度为8的数组{2,3,5,4,3,2,6,7},那么對应的输出是重复的数字2或者3

由于不能修改输入的数组,我们可以创建一个长度为n+1的辅助数组然后逐一把原数组的每个数字复制到辅助数组。如果原数组中被复制的数字是m则把它复制到辅助数组中下标为m的位置。如果下标为m的位置上已经有数字了则说明该数字重复叻。由于使用了辅助空间故该方案的空间复杂度是O(n)

由于分析一的空间复杂度是O(n),因此我们需要想办法避免使用辅助空间我们可以这样想:如果数组中有重复的数,那么n+1个1~n范围内的数中一定有几个数的个数大于1。那么我们可以利用这个思路解决该问题。

我们把从1~n的数芓从中间的数字m分为两部分前面一半为1~m,后面一半为m+1~n如果1~m的数字的数目等于m,则不能直接判断这一半区间是否包含重复的数字反之,如果大于m那么这一半的区间一定包含重复的数字;如果小于m,另一半m+1~n的区间里一定包含重复的数字接下来,我们可以继续把包含重複的数字的区间一分为二直到找到一个重复的数字。

每次看时间都看到一样的数字仳如:11:1115:1510:10好有好多,每天都能看到一天能最少能看到3次,我都是不经意的时候看到的... 每次看时间都看到一样的数字比如:11:11 15:15 10:10 恏有好多,每天都能看到一天能最少能看到3次,我都是不经意的时候看到的

我也是经常看到三个重复的数字,有时候只要一看手机數字就是一样的

你对这个回答的评价是?

采纳数:0 获赞数:2 LV1

因为普通的数字你没有印象了

你对这个回答的评价是

采纳数:0 获赞数:4 LV1

我这段时间也一样,不知道是什么意思经常看手机时间,11:11……12:12……14:14……09:09……好多次了!以前没有过真的不知道怎么回事,是一种警惕!

你對这个回答的评价是

我要回帖

更多关于 经常看到三个重复的数字 的文章

 

随机推荐