Tabla de contenido
1. Detalles de la pregunta
2. Ideas para resolver problemas
3. Implementación del código
1. Detalles de la pregunta
El conjunto s contiene números enteros del 1 al n. Desafortunadamente, debido a errores de datos, un número del conjunto se copió en el valor de otro número del conjunto, lo que provocó que el conjunto perdiera un número y tuviera un número duplicado.
Dado un array nums representa el resultado de un error en el conjunto S.
Encuentre los números enteros recurrentes, encuentre los números enteros que faltan y devuélvalos en forma de matriz.
Ejemplo 1:
Entrada: números = [1,2,2,4]
Salida: [2,3]
Ejemplo 2:
Entrada: números = [1,1]
Salida: [1,2]
2. Ideas para resolver problemas
1. Encuentre la suma de los primeros n elementos cuando los datos no tengan errores :
De la pregunta, podemos obtener: Suma de los primeros n términos =1+2+3+......+n-1+n;
También puedes utilizar la fórmula matemática Sum=n*(a1+an)/2 ;
int sum=numsSize*(1+numsSize)/2;
2. Encuentre la suma de los primeros n elementos cuando los datos sean incorrectos :
De la pregunta: los primeros n elementos y Sum_numsSize =nums[0]+nums[1]+.....+nums[numSize-1]:
(Es decir, la suma de los valores de los elementos en la matriz de números)
for(i=0;i<numsSize;i++)
{
sum_numsSize+=nums[i];
}
3. Abra un espacio de memoria dinámica para almacenar el valor de retorno:
Es necesario almacenar un total de dos valores y el espacio ocupado por dos ints es de 8 bytes ;
Entonces int* ret = (int*) malloc (8);
4. Recorra la matriz para encontrar valores duplicados y asigne valores a ret[0] y ret[1]:
Defina las variables i y j para recorrer la matriz y encontrar valores duplicados;
ret[0]=valor de repetición;
ret[1]=Suma-Sum_numsSize+ret[0];
for (i = 0; i < numsSize; i++)
{
int j = 0;
for (j = i + 1; j < numsSize; j++)
{
if (nums[i] == nums[j])
{
ret[0] = nums[i];
ret[1] = sum - sum_numsSize + ret[0];
return ret;
}
}
}
3. Implementación del código
El código se implementa de la siguiente manera:
int* findErrorNums(int* nums, int numsSize, int* returnSize){
* returnSize=2;
int sum=numsSize*(1+numsSize)/2;
int sum_numsSize=0;
int* ret=(int*)malloc(8);
int i=0;
for(i=0;i<numsSize;i++)
{
sum_numsSize+=nums[i];
}
for(i=0;i<numsSize;i++)
{
int j=0;
for(j=i+1;j<numsSize;j++)
{
if(nums[i]==nums[j])
{
ret[0]=nums[i];
ret[1]=sum-sum_numsSize+ret[0];
return ret;
}
}
}
return ret;
}
fin. . .