[Implementación de algoritmo-Java] Encuentra números que solo aparecen una vez

[Implementación de algoritmo-Java] Encuentra números que solo aparecen una vez

1. Descripción del problema:

Dada una matriz de enteros no vacíos, excepto un elemento que aparece solo una vez, todos los demás elementos aparecen dos veces. Busque el elemento que aparece solo una vez.

como:

Entrada: [2,2,1]; Salida: 1

Entrada: [1,2,2,3,4,3,4]; Salida: 1

2. Respuesta a la pregunta:

Ideas: Operación XOR

Dado que los elementos de esta pregunta solo aparecen una y dos veces, la solución óptima es realizar operaciones XOR en los elementos de la matriz .

¿Qué es la operación XOR?
En pocas palabras, si dos números son diferentes, el resultado XOR es 1; si dos números son iguales, el resultado XOR es 0 . XOR significa que no es igual a 1 e igual a 0.

Características de la operación XOR:

1. Realice una operación OR exclusiva en cualquier número y 0, y el resultado es el número original, es decir, a ^ 0 = a

2. Realice la operación XOR en cualquier número y en sí mismo, el resultado es 0, es decir, a ^ a = 0

3. La operación OR exclusiva satisface las leyes conmutativas y asociativas

Fuente de esta pregunta: LeetCode136

Primero, defina una variable de tipo int singleNumber = 0, luego recorra la matriz, realice la operación XOR con singleNumber a su vez, y finalmente devuelva singleNumber.

Por ejemplo: input [2,2,1] , singleNumber se inicializa a 0.

singleNumber es 0, y 2 se XORed para obtener 2;

singleNumber es 2, y luego XOR con 2 para obtener 0;

singleNumber es 0, y luego calcule con 1 para obtener 1.

3. Análisis de algoritmos:

1. La complejidad del tiempo es O (N): atraviesa la matriz

2. La complejidad del espacio adicional es O (1): no se utiliza espacio adicional.

el código se muestra a continuación

import java.util.Scanner;

class Solution {
    
    
    //测试方法
	public static void main(String[] args) {
    
    
		Scanner in = new Scanner(System.in);
		String str = in.nextLine();
		String[] strArray = str.split(",");
		int[] nums = new int[strArray.length];
		for(int i=0;i<nums.length;i++) {
    
    
			nums[i]=Integer.parseInt(strArray[i]);
		}
		int result = singleNumber(nums);
		System.out.println(result);
	}
    //实现方法
	public static int singleNumber(int[] nums) {
    
    
		int singleNumber = 0;
		for (int num : nums) {
    
    
			singleNumber ^= num;
		}
		return singleNumber;
	}
}

Supongo que te gusta

Origin blog.csdn.net/hkdhkdhkd/article/details/109603910
Recomendado
Clasificación