異或的兩個值』相同為假,不同為真』。
交換兩個整數的值時可以不用第三個引數
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.相同數字異獲結...