Práctica diaria de preguntas de algoritmo --- Día 77: Hay elementos duplicados

¡Acostúmbrate a escribir juntos! Este es el día 12 de mi participación en el "Nuevo plan diario de Nuggets · Desafío de actualización de abril", haga clic para ver los detalles del evento .

1. Descripción del problema

te da una matriz de enteros  nums . Devuelve si algún valor aparece en la matriz  al menos dos veces  ; devuelve  true si cada elemento de la matriz es diferente  false .

Enlace del tema: Hay elementos duplicados

En segundo lugar, los requisitos de la materia.

Ejemplo 1

输入: nums = [1,2,3,1]
输出: true
复制代码

Ejemplo 2

输入: nums = [1,2,3,4]
输出: false
复制代码

visitar

1.哈希表、排序、判重
2.建议用时10~25min
复制代码

3. Análisis de problemas

Esta pregunta es relativamente simple, principalmente para examinar la idea de juzgar elementos repetidos. No juzgue con un bucle for doble al principio, se agotará el tiempo.

Hay varias alternativas: づ ̄ 3 ̄)づ

1. Conteo de hash

Primero recorra los elementos de la matriz, use una tabla hash para almacenar el número de ocurrencias de cada número, si se encuentra que el número apareció durante el almacenamiento, devolverá verdadero, de lo contrario devolverá falso al final;

2. conjunto de almacenamiento

El conjunto tiene una característica que los elementos duplicados almacenados se omitirán automáticamente y no se almacenarán.

Por lo tanto, después de establecer la matriz con elementos repetidos, la longitud definitivamente será más pequeña.

3. Juicio de clasificación

¿Cómo ordenar elementos duplicados?

Primero, tomando la muestra 1 como ejemplo, el resultado ordenado es:

1 1 2 3
复制代码

El primer número no necesita ser juzgado, a partir del segundo número, si es igual al número anterior, devuelve verdadero, de lo contrario, devuelve verdadero;

En cuarto lugar, la implementación de la codificación.

1. Conteo de hash

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        int i,n=nums.size();//初始化
        map<int,int>m;//哈希计数
        for(i=0;i<n;i++)
        {
            m[nums[i]]++;//计数
            if(m[nums[i]]>=2)//条件判断
                return true;
        }
        return false;
    }
};
复制代码

2. conjunto de almacenamiento

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        int i,n=nums.size();//初始化
        set<int>s;//set存储
        for(i=0;i<n;i++)
            s.insert(nums[i]);//插入
        if(s.size()<n)//发现数组长度变小,存在重复元素
            return true;
        else    
            return false;
    }
};

复制代码

3. Juicio de clasificación

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        int i,n=nums.size();//初始化
        sort(nums.begin(),nums.end());//排序
        for(i=1;i<n;i++)
            if(nums[i]==nums[i-1])//判重
                return true;
        return false;
    }
};
复制代码

5. Resultados de la prueba

1.png

2.png

3.png

En general, los tres métodos son similares y, si tiene que comparar, el tercer método es mejor.

Supongo que te gusta

Origin juejin.im/post/7085502678817734686
Recomendado
Clasificación