lc 只出現一次的數字 (異或運算)
阿新 • • 發佈:2018-07-14
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 只出現一次的數字 (異或運算)