給定非空整數數組,除了某個元素只出現一次外,其餘元素均出現兩次。找出那個只出現一次的元素。要求:線性時間複雜度、不使用額外空間。
範例:
輸入: [2,2,1]
輸出: 1
輸入: [4,1,2,1,2]
輸出: 4
異或(^)關鍵性質:
a ^ a = 0(相同為 0)a ^ 0 = a將數組所有元素異或,成對元素抵消為 0,最終結果即為單獨元素。
時間複雜度:O(n),空間複雜度:O(1)。
public class Solution {
public int singleNumber(int[] nums) {
int result = nums[0];
for (int i = 1; i < nums.length; i++) {
result ^= nums[i];
}
return result;
}
}
from functools import reduce
from operator import xor
class Solution:
def singleNumber(self, nums):
return reduce(xor, nums)
# 或一行式
# return functools.reduce(lambda x, y: x ^ y, nums)
異或運算是位運算技巧的皇冠上的明珠,掌握其「成對抵消、順序無關」特性,能秒殺一大類「找單一/找不同」問題。