異或^:位運算符號,相同的位置0,不同的位置1:
例:0101^0001=0100
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
說明:你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
例:輸入 2 2 1 輸出 1 ,輸入 2 3 3 1 2 輸出 1
c語言實現:
int singlenumber(int* nums, int numssize) {
int result=0;
for(int i=0;i彙總:
(1) 使某些特定的位翻轉
例如對數10100001的第2位和第3位翻轉,則可以將該數與00000110進行按位異或運算。
10100001^00000110 = 10100111
(2) 實現兩個值的交換,而不必使用臨時變數。
例如交換兩個整數a=10100001,b=00000110的值,可通過下列語句實現:
a = a^b; //a=10100111
b = b^a; //b=10100001
a = a^b; //a=00000110
(3) 在組合語言中經常用於將變數置零:
xor a,a
(4) 快速判斷兩個值是否相等
舉例1: 判斷兩個整數a,b是否相等,則可通過下列語句實現:
return ((a ^ b) == 0)
C語言異或操作的妙用
如果想要交換2個變數,一般的做法是引入第三個變數,例如,這樣2個變數中的值就實現了交換。那能不能不引入其他變數就可以實現變數值的交換呢?答案是肯定的。用異或操作可以實現,有2種實現方法,本質上是一樣的。法1 法2 因為2種方法本質一樣,就方法一進行一下證明。異或操作滿足結合律和交換律,且由異或操作的...
C語言異或操作的妙用
如果想要交換2個變數,一般的做法是引入第三個變數,例如,cpp view plain copy temp a a b b temp 這樣2個變數中的值就實現了交換。那能不能不引入其他變數就可以實現變數值的交換呢?答案是肯定的。用異或操作可以實現,有2種實現方法,本質上是一樣的。法1 cpp view...
異或的妙用
給你1 1000個連續自然數,然後從中隨機去掉兩個,再打亂順序,要求只遍歷一次,求出被去掉的兩個數。這題其實挺為面試者的,因為要求1分鐘內說出解法,且不能使用計算機 紙和筆。如果之前沒有遇到過類似的題目,加上面試時的緊張心情,很難能在那麼短的時間裡想到解決方案,至少我做不到。好在我有時間,上網看了一...