¡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
En general, los tres métodos son similares y, si tiene que comparar, el tercer método es mejor.