陣列中兩個數出現一次其餘出現兩次

2021-09-26 03:57:27 字數 496 閱讀 4143

/* 有兩個數a b分別出現一次 其餘出現兩次

* 只要能找到乙個劃分乙個包含a 乙個包含b 對兩個分別使用找出出現一次的演算法

* * */

class solution {

public:

vectorsinglenumber(vector& nums) {

int axorb=0;

for(int &num:nums) axorb ^= num;

// x&(-x) 得到的是乙個mask返回最低位1所在的位置 allxor最後是兩個不同的數異或的結果

// eg: allxor=10 即1010 mask=10 根據異或性質 a b 在第1位的值不同

int a=0, b=0, mask=axorb&(-axorb);

//cout<(-6)cout<(6)<(-6)<

陣列中兩個數字出現了一次,其餘的出現了兩次

從頭到尾依次異或陣列中的每乙個數字,那麼最終得到的結果就是兩個只出現一次的數字的異或結果。因為其他數字都出現了兩次,在異或中全部抵消掉了。由於這兩個數字肯定不一樣,那麼這個異或結果肯定不為0,也就是說在這個結果數字的二進位制表示中至少就有一位為1。我們在結果數字中找到第乙個為1的位的位置,記為第n位...

陣列中只出現一次的兩個數

劍指 offer 56 i.陣列中數字出現的次數 大意 找出陣列中只出現一次的兩個數 其它出現兩次 思路 思路 首先需要知道乙個前置問題 找出陣列中只出現一次的乙個數 其它出現兩次 顯然,對整個陣列進行異或操作即可。那麼,我們是否有可能將本題中的陣列分隔成兩部分呢 不要求連續 答案是肯定的 我們仍然...

陣列中只出現一次的兩個數字

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。你可以假設這兩個數字一定存在。樣例輸入 1,2,3,3,4,4 輸出 1,2 解決方案 異或 兩個相同的元素異或 設出現一次的數字分別為x和y 1,先用乙個sum 將整個陣列遍歷一遍同時異或該陣列元素與sum...