[アルゴリズム-Javaの実装]一度だけ現れる数字を見つける

[アルゴリズム-Javaの実装]一度だけ現れる数字を見つける

1.問題の説明:

空でない整数の配列を指定すると、1回だけ表示される要素を除いて、他のすべての要素は2回表示されます。一度だけ現れる要素を探してください。

といった:

入力:[2,2,1];出力:1

入力:[1,2,2,3,4,3,4];出力:1

2.質問の回答:

アイデア:XOR演算

この質問の要素は1回と2回しか表示されないため、最適な解決策は配列要素に対してXOR演算を実行することです。

XOR演算とは何ですか?
簡単に言うと、2つの数値が異なる場合、XORの結果は1です。2つの数値が同じ場合、XORの結果は0です。XORは、1に等しくなく、0に等しくないことを意味します。

XOR演算の機能:

1.任意の数と0に対して排他的論理和演算を実行すると、結果は元の数、つまりa ^ 0 = aになります。

2.任意の数とそれ自体に対してXOR演算を実行します。結果は0、つまりa ^ a = 0です。

3.排他的論理和演算は可換法則と結合法則を満たします

この質問のソース:LeetCode136

まず、int型変数singleNumber = 0を定義し、次に配列をトラバースし、singleNumberでXOR演算を実行し、最後にsingleNumberを返します。

例:input [2,2,1]、singleNumberは0に初期化されます。

singleNumberは0であり、2は2を取得するためにXORされます。

singleNumberは2であり、次に2とXORして0を取得します。

singleNumberは0で、1で計算して1を取得します。

3.アルゴリズム分析:

1.時間計算量はO(N)です:配列をトラバースします

2.余分なスペースの複雑さはO(1)です。余分なスペースは使用されません。

コードは以下のように表示されます

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;
	}
}

おすすめ

転載: blog.csdn.net/hkdhkdhkd/article/details/109603910