剑指offer|数组中重复的数字

来源:互联网 发布:购买海关数据 编辑:程序博客网 时间:2024/05/21 18:43

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

思路:

首先想到的是用一个数组来模仿hashmap,以为空间限制或时间上会通不过,没想到这样也过啦。

class Solution {public:    // Parameters:    //        numbers:     an array of integers    //        length:      the length of array numbers    //        duplication: (Output) the duplicated number in the array number    // Return value:       true if the input is valid, and there are some duplications in the array number    //                     otherwise false    bool duplicate(int numbers[], int length, int* duplication) {        int copy[length];        for(int i=0;i<length;++i)        {            copy[i]=0;        }        for(int i=0;i<length;++i)        {            if(copy[numbers[i]]!=0)            {                *duplication=numbers[i];                return true;            }            else            {                copy[numbers[i]]=1;            }        }        return false;    }};

然后参考剑指offer的方法,每次把一个数字放到它对应的位置上去,直到找到第一个重复的数字或者遍历到数组末尾返回false。

class Solution {public:    // Parameters:    //        numbers:     an array of integers    //        length:      the length of array numbers    //        duplication: (Output) the duplicated number in the array number    // Return value:       true if the input is valid, and there are some duplications in the array number    //                     otherwise false    bool duplicate(int numbers[], int length, int* duplication) {        if( numbers==nullptr || length <=1)            return false;        for(int i=0;i<length;++i)        {            if(numbers[i]<0 || numbers[i]>=length)                return false;        }        for(int i=0;i<length;++i)        {            while(numbers[i]!=i)            {                if(numbers[numbers[i]]==numbers[i])                 {                    *duplication=numbers[i];                    return true;                }                else                {                    int temp=numbers[i];                    numbers[i]=numbers[temp];                    numbers[temp]=temp;                }            }        }        return false;    }};
0 0
原创粉丝点击