数组中的重复数字

题目描述

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

  1. 利用boolean类型的数组标记求解,时间和空间复杂度都为O(n)【代码略】
  2. 从头开始遍历,每次比较当前数与该数所在的位置。由于该数组的特性:
    ①当前数=其位置时,遍历下一个数;
    ②否则,交换当前位置的数与该数数值对应位置的数。若两数相等则该数为重复的数,否则交换后继续循环上次的操作。
    时间复杂度为O(n),无需额外空间【下面为第二种思路的代码】
//原数组numbers,长度length,重复数字存入duplication[0]
public boolean duplicate(int numbers[],int length,int [] duplication) {
        if(numbers == null || length < 0)
            return false;
        
        for(int i=0; i<length; i++){
            while(numbers[i] != i){
                if(numbers[i] == numbers[numbers[i]]){
                    duplication[0] = numbers[i];
                    return true;
                }
                
                int t = numbers[i];
                numbers[i] = numbers[t];
                numbers[t] = t;
            }
        }
        return false;
    }
  • 注意写对要交换的两数,我在这里卡了好久
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容