Oferta] [demostrar la seguridad preguntas plano del conjunto 03. números duplicados

título

Encontrar un número de serie duplicados.
Todos los números en una matriz de nums longitud n de están en el rango de 0 ~ n-1. Algunos de matriz digital se duplica, pero no sabe cuántos números repetir, no sé cada número se repitió varias veces. Por favor, encontrar una gran variedad de cualquiera de los números duplicados.
Ejemplo 1:

输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3 

restricciones:
2 <= n <= 100000

Un pensamiento: tabla hash

Inicialización del tamaño de la tabla hash es el tamaño de los elementos de la matriz, el valor inicial de -1 (porque todos los elementos de la matriz es mayor que 0).
Cada número n a través de la matriz, si el valor de hash de 0 indica que el número ya existe, regresa directamente, de lo contrario, actualizar el número n correspondiente al valor de hash de 0 indica una posición ya existe.

código

complejidad Tiempo: O (n)
la complejidad espacial: O (n)

class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {
        vector<int> hash(nums.size(), -1);
        for (auto n : nums) {
            if (hash[n] == 0) return n;
            ++hash[n];
        }
        return -1;
    }
};

Pensar dos: Ordenar Encuentra

Después de haberlo pedido, si hay números iguales de dos de retorno adyacente.

código

complejidad del tiempo: O (nlogn)
Complejidad espacial: O (1)

class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        for (int i = 1; i < nums.size(); ++i) {
            if (nums[i] ==  nums[i - 1]) return nums[i];
        }
        return -1;
    }
};

Pensamiento tres: Posición de Cambio

Subíndice i es la posición de cada matriz, se determina si o igual a la nums [i]

  • Si el índice i no es igual nums posición [i], nums entonces los nums [i] deberían realmente ser colocados [nums [] i] posición
    • Si nums [i] iguales nums [nums [i]], los elementos que se repiten encontraron;
    • De lo contrario, los nums de cambio [i] y [nums nums [i]], pronto nums [i] en la posición correcta.
  • Si son iguales, se determina que una posición.

código

complejidad Tiempo: O (n)
la complejidad del espacio: O (1)

class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {
        for (int i = 0; i < nums.size(); ++i) {
            while (nums[i] != i) {
                if (nums[nums[i]] == nums[i]) return nums[i];
                swap(nums[i], nums[nums[i]]);
            }
        }
        return -1;
    }
};
Publicado 18 artículos originales · ganado elogios 86 · vistas 160 000 +

Supongo que te gusta

Origin blog.csdn.net/u013178472/article/details/104968711
Recomendado
Clasificación