1. 程式人生 > >lc 只出現一次的數字 (異或運算)

lc 只出現一次的數字 (異或運算)

for 出現一次 ati 時間 single 使用 val ret 一次

給定一個非空整數數組,除了某個元素只出現一次以外,其余每個元素均出現兩次。找出那個只出現了一次的元素。

說明:

你的算法應該具有線性時間復雜度。 你可以不使用額外空間來實現嗎?

異或解法:


public class Solution2 {
public int singleNumber(int[] arr) {
// invalid check
if (arr.length == 0) {
return -1;
}
int result = 0;
for (int i = 0; i < arr.length; i++) {
result = result ^ arr[i];
}
return result;
}

public static void main(String[] args) {
int[] arr = { 0, 1, 1, 2, 2, 3, 0 };
System.out.println(new Solution2().singleNumber(arr));
}
}

註釋:一個整數和它本身異或之後得到值是0,0與其他整數異或得到的是這個整數本身

異或運算的兩個法則:

①. a ^ b = b ^ a

②. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c

真 ^ 假 = 真  假 ^ 真 = 真  假 ^ 假 = 假  真 ^ 真 = 假

lc 只出現一次的數字 (異或運算)