数组中重复的数字

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。

也不知道每个数字重复几次。请找出数组中任意一个重复的数字。

例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

思路:用一个辅助数组,数组大小为n,遍历数组将数组的值作为辅助数组的下标

辅助数组的值统计,统计过程中,如果不等于一,就输出

(这里要注意的是一位数组初始化,并且全部赋值为0)

时间复杂度O(n),空间复杂度不是O(1)

代码:

// 思路 对数组进行遍历,将数组的值作为另一个数组得下标,
//该下标对应的值加1,并赋值给一个变量
//当这个变量的值大于1时就是要的结果
class Solution {
public:

    bool duplicate(int numbers[], int length, int* duplication) {

        if (length <= 0 || numbers == NULL)
            return false;
//       int arr2[length+1];
//       for(int i = 0; i < length+1; i++)
//            arr2[i] = 0;
       int *arr2 = (int *)calloc(length, sizeof(int));
       int temp = 0;
       for(int i = 0; i < length; i++)
       {
           arr2[numbers[i]]++;
           temp = arr2[numbers[i]];
           if (temp > 1)
           {
               *duplication = numbers[i];
               break;
           }
       }
       if (temp > 1)
        return true;
       else
        return false;
    }
};

 

posted @ 2020-03-10 13:39  Lucky&  阅读(265)  评论(0编辑  收藏  举报
//返回顶部开始
//返回顶部结束