# 問題1
- 整数配列
numsが与えられる.numsは1つのある整数$x$を除いてすべての整数が2個ずつ格納されている.$x$を求めよ. - https://leetcode.com/problems/single-number/
# 答え
xor演算を使う- 同じ整数同士の
xorは0になることを利用する a ^ a == 0
- 同じ整数同士の
numsを全部xorすれば1つしかない要素が残る
| |
# 問題2
- 整数配列
numsが与えられる.numsは2つのある整数$x$,$y$を除いてすべての整数が2個ずつ格納されている.$x$,$y$を求めよ. - https://leetcode.com/problems/single-number-iii/
# 答え1
setを使う- 時間計算量$O(n)$
- 空間計算量$O(n)$
| |
# 答え2
xorを使う1つ目の問題と同じように考えると,
numsの要素全部のxorを取った結果Pはxとyの重ね合わせになっているので分解する必要があるxorの特徴から,一方がわかれば良い
Pを2進数表記したときに1になっている桁に注目すると,そこに桁が立つということは,x,yのどっちかにもその位置の桁が立っていたはず(じゃないとxorした結果に残らない)時間計算量$O(n)$
空間計算量$O(1)$
| |