数组中重复的数字

你快乐吗?

Posted by bbkgl on September 26, 2019

数组中重复的数字

C++,原数组进行hash。

题目中说明了数字范围是[0, length - 1]就很明显有让原数组hash的意思了。

可以把被访问过这一信息,直接用原数组记录,具体方法我想到两种,假设当前访问到t = numbers[i]:

  • numbers[t] += length;
  • numbers[t] = -numbers[t];

下次再碰到同样为t的值时,只要看是不是大于n或者是负数就行了。

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) {
        for (int i = 0; i < length; i++) {
            int t = numbers[i];
            if (t >= length) t -= length;
            if (numbers[t] >= length) {
                *duplication = t;
                return true;
            }
            numbers[t] += length;
        }
        return false;
    }
};