Leetcode-Número de ocurrencias de números en la matriz-2

Número de apariciones de números en la matriz

La pregunta requiere
  que, a excepción de dos números en una matriz de números enteros, otros números aparezcan dos veces. Escriba un programa para encontrar estos dos números que solo aparecen una vez. La complejidad temporal requerida es O (n) y la complejidad espacial es O (1).
La idea
  se basa en las dos fórmulas a ^ a = 0 y 0 ^ a = a. Primero XOR todos los elementos de la matriz. El resultado binario debe ser el resultado de dos dígitos y se selecciona un bit binario como 1, XOR los elementos totales de la matriz con los bits, el resultado es 1 en un grupo y el resultado es 0 en un grupo, por lo que la clasificación está destinada a dividir dos números separados en dos grupos diferentes, luego XOR los elementos en cada grupo, y los valores restantes en cada grupo son números individuales.
Código

int* singleNumbers(int* nums, int numsSize, int* returnSize)
{
	int *res = (int *)malloc(sizeof(int)* 2);
	*returnSize = 2;
	if (numsSize == 2)
	{
		return nums;
	}
	int s = 0;
	for (int i = 0; i < numsSize; i++)
	{
		s ^= nums[i];
	}
	//n 是计数这两个数哪一位不同
	int n = 0;
	while ((s & 1) == 0)
	{
		s = s >> 1;
		n++;
	}
	int s1 = 0;
	int s2 = 0;
	for (int i = 0; i < numsSize; i++)
	{
		if ((nums[i] >> n) & 1)
		{
			s1 ^= nums[i];
		}
		else
		{
			s2 ^= nums[i];
		}
	}
	res[0] = s1;
	res[1] = s2;
	return res;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_43580319/article/details/113100980
Recomendado
Clasificación