Es ist bekannt, dass ein Array nur aus Zahlen besteht und nur eines nur ein Element hat und die anderen alle aus zwei Elementen bestehen. So finden Sie die Zahl heraus, die nur einmal vorkommt

Anforderungen: Ich habe dies gesehen, als ich eine Frage gestellt habe, und es ist sehr interessant. Die Frage lautet: Es ist bekannt, dass ein Array voller Zahlen ist, nur eine Zahl nur einmal vorkommt und die anderen zweimal vorkommen. Woher wissen Sie das? Was ist diese Nummer (Sie müssen nur wissen, wie die Nummer lautet, es sind keine Standortinformationen erforderlich), z. B. das Array [1,2,3,4,5,1,2,3,4], wir müssen die Nummer finden 5, die nur einmal vorkommt.

Methode 1: Durchlaufen von zwei Schichten von for-Schleifen;
das Prinzip ist sehr einfach, nämlich zwei Schichten von for-Schleifen, um die Zahl zu finden, die nicht wiederholt vorkommt (diese Methode sollte die komplizierteste Methode sein);

let arr = [1,2,3,4,5,1,2,3,4];
let getSingleNum = function(arr){
    
    
	for(let i=0; i<arr.length; i++){
    
    
		let flag = true;
		for(let j=0; j<arr.length; j++){
    
    
			if(arr[i]==arr[j]&&i!==j){
    
    
				flag=false
			}
		}
		if(flag){
    
    
			return arr[i]
		}
	}
}
getSingleNum(arr)  // 5

Methode 2: Verwenden Sie den Bitoperator XOR (^)
. ist: 1000 ^ 0111 Das Ergebnis ist 1111; daher hat XOR die folgenden Eigenschaften:

1.0 XOR: Jede Zahl ist gleich der Zahl selbst, z. B. 0 ^ 5, das Ergebnis ist 5;
2. Das Ergebnis zweier identischer Zahlen. XOR ist 0, z. B. 7 ^ 7, das Ergebnis ist 0;
3. Die XOR-Operation erfüllt die folgenden Anforderungen Kommutativgesetz und Assoziativgesetz, z. B. 2 ^ 3 ^ 4 und 4 ^ 3 ^ 2, sind die gleichen Ergebnisse

Wir haben also den folgenden Code:

let arr = [1,2,3,4,5,1,2,3,4]
let getSingleNum = function(arr){
    
    
	let num = 0
	for(let i=0;i<arr.length;i++){
    
    
		num = num ^ arr[i]  
	}
	return num
}
getSingleNum(arr)  // 5

Erweiterung: XOR verfügt auch über eine weitere Funktion, mit der beurteilt werden kann, ob eine Zahl auf die n-te Potenz von 2 erhöht wird (n ist eine positive ganze Zahl). Natürlich können Sie dies auch mit %2 erreichen, aber mit der XOR-Methode ist bequemer und schneller

let isTwo =function(num){
    
    
	return num^(num-1) === num + (num-1)
}
isTwo(4)  // true
isTwo(3)  // false

Das Prinzip dieser Methode ist ebenfalls sehr einfach: Im Binärformat ist die n-te Potenz von 2 1000000 ... (es gibt n Nullen) und die n-te Potenz von 2 minus eins ist 0111111 (es gibt n 1), also diese beiden Zahlen Das Ergebnis von XOR ist 111111... (es gibt n+1 Einsen), und diese Zahl ist 2 hoch n-te Potenz plus 2 hoch n-te Potenz minus eins.

Guess you like

Origin blog.csdn.net/brilliantSt/article/details/123215653