這是我剛纔看到的一個leetcode問題。有人給出的解決方案有點難以理解,我希望有人可以詳細說明一下:算法:在數組中查找單個數字
給定一個整數數組,每個元素出現三次,除了一次,只出現一次,只出現一次。找到那一個。
這樣做是在線性時間內沒有額外的空間。
解決方案有人給:
public int singleNumber(int[] A) {
int ones = 0, twos = 0;
for(int i = 0; i < A.length; i++){
ones = (ones^A[i]) & ~twos;
twos = (twos^A[i]) & ~ones;
}
return ones;
}
這似乎是一個真棒的解決方案,但它是一個有點難以理解。評論中有人表示這可以擴展到任何數量的重複。
如果每個元素出現兩次,除了一次,那麼你可以只是異或所有的數字。我想這是3次適應。 – maraca
使用數組'[n,n,n]',可以看到變量取值爲'n,0','0,n'和'0,0'。現在只需顯示數組的順序無關緊要。 –