乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。
首先變負數吧,在二進位制中負數採用補碼的形式,而補碼就是反碼+1,那麼110的反碼是 11...1001,那麼加1後是 11...1010,然後和 110 相與,得到了10,就是**中的diff變數。得到了這個diff,就可以將原陣列分為兩個陣列了。為啥呢,我們想阿,如果兩個相同的數字亦或,每位都會是0,而不同的數字亦或,一定會有對應位不同,乙個0乙個1,這樣亦或是1。比如3和5的二進位制11和101,如果從低往高看,最開始產生不同的就是第二位,那麼我們用第二位來和陣列中每個數字相與,根據結果的不同,一定可以把3和5區分開來,而其他的數字由於是成對出現,所以區分開來也是成對的,最終都會亦或成0,不會3和5產生影響。分別將兩個小組中的數字都異或起來,就可以得到最終結果了,參見**如下:
class solution
return ret;
}}
劍指Offer 13剪繩子
public static int cuttingrope int n return max.remainder biginteger.valueof 1000000007 intvalue public static biginteger cutting int n,int m 不會有人比我瘋狂了...
劍指offer13 把陣列排成最小的數
題目描述 輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。解題思路 兩個數之間比較,看哪個數放在前面排成的數字較小。利用冒泡的方法,將陣列排序 解答 coding utf 8 class so...
劍指offer 13 調整陣列中的偶數到奇數後面
1 冒泡解法 穩定 2 輔助陣列 穩定 3 兩個指標 不穩定 include include using namespace std class solution bool label false for int i 0 i array.size i if label false 輔助陣列完成 vo...