[Oferta de dedo de espada] _15 números repetidos en la matriz

Descripción del título

Todos los números en una matriz de longitud n están en el rango de 0 a n-1. Se repiten algunos números en la matriz, pero no sé cuántos números se repiten. No sé cuántas veces se repite cada número. Encuentre cualquier número duplicado en la matriz. Por ejemplo, si la matriz de entrada de longitud 7 es {2,3,1,0,2,5,3}, la salida correspondiente es el primer número 2 repetido.

Ideas para resolver problemas

La matriz de escaneo {2,3,1,0,2,5,3} comienza con un subíndice de 0. Si el número de la posición actual no es igual a su subíndice, se intercambiará con el valor del elemento actual en la tabla a continuación

  1. La primera vez, el subíndice es 0, el valor es 2. No es igual, intercambie con el número 1 con el subíndice 2 {1,3,2,0,2,5,3}
  2. La segunda vez, el subíndice es 0, el valor es 1, no igual a, intercambio con el número 3 con subíndice 1 {3,1,2,0,2,5,3}
  3. La tercera vez, el subíndice es 0, el valor es 3, no igual a, intercambio con el número 0 con subíndice 3 {0,1,2,3,2,5,3}
  4. La cuarta vez, el subíndice es 0, el valor es 0, igual a, juzgue el siguiente {1,2,3,2,5,3}
  5. La quinta vez, el subíndice es 1, el valor es 1, igual a, juzgar el siguiente {2,3,2,5,3}
  6. La sexta vez, el dobladillo es 2, el valor es 2, igual a, juzgar el siguiente {3,2,5,3}
  7. La séptima vez, el subíndice es 3, el valor es 3, igual a, juzga la siguiente celda {2,5,3}
  8. La octava vez, el subíndice es 4, el valor es 2, no es igual a, intercambiar con el número del subíndice 2, luego el número con el subíndice 2 es 2, por lo que se encuentra el primer número duplicado

Implementación de código

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 <= 0)
            return false;
        for(int i=0;i<length;++i)
        {
            if(numbers[i]<0 || numbers[i]>length-1)
                return false;
        }
        
        for(int i=0;i<length;++i)
        {
            while(numbers[i] != i)
            {
                if(numbers[i] == numbers[numbers[i]])
                {
                    *duplication = numbers[i];
                    return true;
                }
                
                swap(numbers[i],numbers[numbers[i]]);
            }
        }
        return false;
    }
};
Sol
Publicado 253 artículos originales · elogiado 41 · 40,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/liuyuchen282828/article/details/104049967
Recomendado
Clasificación