タイトル
与えられた空でない整数の配列、すべての要素が1以外の二回表示されます。その単一のものを探します。
注意:
あなたのアルゴリズムは線形ランタイムの複雑さを持っている必要があります。あなたは余分なメモリを使用せずにそれを実装できますか?
例1:
Input: [2,2,1]
Output: 1
例2:
Input: [4,1,2,1,2]
Output: 4
問題解決のためのアイデア
この質問は私の心が突然ビットXOR演算が真の出現、解決するためにO(n)との線形時間複雑性を使用するように私たちを必要とし、この一般的な要件を参照して、追加のメモリを申請することはできません本明細書でビット整数別々のデジタルアレイを導出するために排他的論理和演算の特性を利用することができます。
XORは、次のプロパティがあります。
- 2つの排他的論理和の結果の同じ数が0であります
- 任意の0の数や、独自のXOR結果
- 排他的論理和演算が可換と連想されます
次のように解決策は以下のとおりです。
class Solution {
public int singleNumber(int[] nums) {
int result = 0;
for (int a : nums) {
result ^= a;
}
return result;
}
}
以下は時間とメモリの消費量は次のとおりです。
ランタイム:0ミリ秒の
メモリ使用量:37.8メガバイト