Colección de errores (explicación detallada del lenguaje C)

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. . .


    

Supongo que te gusta

Origin blog.csdn.net/m0_71676870/article/details/132259359
Recomendado
Clasificación