位運算 只出現一次的的數字

2022-09-03 06:54:11 字數 1224 閱讀 9422

異或的兩個值'相同為假,不同為真'。

交換兩個整數的值時可以不用第三個引數

a = a ^ b ^ a = b

b = b ^ a ^ b = a

乙個只出現一次的數字。

乙個整型陣列裡除了乙個數字之外,其他的數字都出現了偶數次。請寫程式找出這個只出現一次的數字。

int num = 0;

if (array.length > 0)

}return num;

}兩個只出現一次的數字。

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。

先舉出乙個陣列:

最終異或結果:1^3 = 0010 ,第二位是1,則說明兩個單獨出現的數的第二位不同;

那麼我們可以根據這個條件對陣列進行分組:第二位為1的為一組,第二位為0的為一組;然後每一組進行異或,

得到的兩個結果就是單獨出現的倆個數!

//num1,num2分別為長度為1的陣列 將num1[0],num2[0]設定為返回結果

int num = 0;

if (array.length > 0)

// 64 位 jvm 中,int 的長度是32位 [-2147483648,2147483647]

for (int i = 0; i < 32; i++)

}for (int j = 0; j < array.length; j++) else }}

system.out.println("" + num1[0] + "+" + num2[0] + "");

}

乙個陣列中,只有乙個數字出現了一次,其他數字都出現了三次,找出這個出現了一次的數字;

舉個栗子:

0010

0010

0010

0011

0011

0011

0101

出現三次的數 他們二進位制上位的1相加 就能被3整除,

那麼,加入了5之後就破壞了原有的平衡,只要找出每一位之和不能被3整出的位,那單獨出現一次的數的這一位肯定是1

以後再有找只有乙個出現一次的數,其他數都是》=3 次出現,都是這樣求解

int num = 0;

if (array.length > 0)

}for (int j = 0; j < 32; j++) }}

return num;

}

位運算 只出現一次的的數字

異或的兩個值 相同為假,不同為真 交換兩個整數的值時可以不用第三個引數a a b a b b b a b a乙個只出現一次的數字。乙個整型陣列裡除了乙個數字之外,其他的數字都出現了偶數次。請寫程式找出這個只出現一次的數字。int num 0 if array.length 0 return num ...

位運算 只出現一次的數字III

給定乙個整數陣列 nums,其中恰好有兩個元素只出現一次,其餘所有元素均出現兩次。找出只出現一次的那兩個元素。示例 輸入 1,2,1,3,2,5 輸出 3,5 注意 結果輸出的順序並不重要,對於上面的例子,5,3 也是正確答案。你的演算法應該具有線性時間複雜度。你能否僅使用常數空間複雜度來實現?首先...

位運算解決只出現一次的數字

1.有一組資料,只有乙個數字是出現一次,其他是兩次,請找出這個數字。public class test int ret 0 for int i 0 i num.length i system.out.println ret 解題關鍵 a.0與任何數字進行異或運算結果都是那個數本身 b.相同數字異獲結...