位運(yùn)算,二進(jìn)制厚掷,異或的一些算法題

好記性不如爛筆頭
一,異或用法:
1.不借用變量前提滑废,交換兩數(shù)值蝗肪?

a = a ^ b;
b = a ^ b;
a = a ^ b;

2.數(shù)組中只有一個數(shù)出現(xiàn)奇數(shù)次袜爪,其余數(shù)都出現(xiàn)了偶數(shù)次蠕趁,怎么找到這個數(shù)?

public static int findOne(int[] arr){
    int a = 0;
    for(int i=0;i<arr.length;i++){
        a ^= arr[i];
    }
    return a;
}

3.提供有一個int數(shù)辛馆,提取其最右側(cè)第一個1 (a&(~a+1))
記住定律 a&(-a) 結(jié)果是右側(cè)第一個數(shù)為1俺陋,其余為0的數(shù)(二進(jìn)制)
4.一個數(shù)組有兩個數(shù)出現(xiàn)奇數(shù)次,其他都出現(xiàn)偶數(shù)次昙篙,求這兩個數(shù)(需要需用2腊状,3的結(jié)論)

//假設(shè)a,b為這兩個奇數(shù)次數(shù),原理就是先異或苔可,求出結(jié)果eor = a^b
//可以得出結(jié)論eor必定不為0缴挖,說明二進(jìn)制位必定有一位為1
//找到最右側(cè)1的位rightOne利用3.的知識點(diǎn)
//可以得出結(jié)論a,b必定分屬兩個陣營,如果a的rightOne為1焚辅,那么b的肯定為0
//同理剩余的出現(xiàn)的偶數(shù)次的數(shù)他們也可以被分成這兩個陣營
//再利用a去異或自己陣營的這些偶數(shù)次的數(shù)可以得到a=eor`映屋,b則等于eor^eor`
public static void findTwo(int[] arr){
    int eor = 0;  //eor其實(shí)就是a^b
    for(int i=0;i< arr.length;i++){
        eor ^=arr[i];
    }
    int rightOne = eor&(-eor);
    int onlyOne = 0 ; //eor'
    for(int i=0;i<arr.length;i++){
        if((arr[i]&rightOne)!=0){  //說明arr[i]和rightOne的1重疊到了,就可以劃出陣營
            onlyOne ^= arr[i];
        }
    }
    System.out.println("一個是"+onlyOne+"另一個是"+(onlyOne^eor));
}

5.一個數(shù)組中有一個數(shù)出現(xiàn)了K次同蜻,其他數(shù)出現(xiàn)了M次棚点,已知M>1,K<M,求出出現(xiàn)K次的數(shù)的值湾蔓,要求空間復(fù)雜度O(1),時(shí)間復(fù)雜度O(n)

/**
 解題思路:整型數(shù)int是32位字節(jié)的瘫析,我們開辟一個長度為32的數(shù)組,里面暫時(shí)全放0
 然后將出先K次的數(shù)二進(jìn)制上出現(xiàn)了1的位置加到數(shù)組里面默责,同理M也將二進(jìn)制位出現(xiàn)了1的數(shù)加到數(shù)組
 最后出現(xiàn)的數(shù)組可能就類似[...a],假設(shè)數(shù)組最后一位等于a,說明a的組成成分可能有K也可能有M
 如果有K贬循,那么用a%M則必不可能=0,同理桃序,如果a%M=0說明此處K的二進(jìn)制位0杖虾,
 則我們就可以根據(jù)求余%運(yùn)算推導(dǎo)出最后的k的二進(jìn)制表示從而算出K為多少
 */
public static void findK(int[] arr,int k,int m){
    int[] a = new int[32];    //定義32位的數(shù)組
    for(int num : arr){               
        for (int i = 0; i < 32; i++) {         //這個是常數(shù)次循環(huán),所以是O(1)
            if(((num>>i)&1)!=0){           //這里((num>>i)&1)!=0說明num第i位上的數(shù)是1
                a[i]++;                    //可以寫成a[i]+=((num>>i)&1),就不需要if語句
            }
        }
    }
        int answer = 0;                 //結(jié)果值
        for(int i=0;i<32;i++){ 
            if(a[i]%m!=0){             //求余葡缰,如果不等于0說明此處K有1
                answer |=(1<<i);         //則將1左移i位平且和answer做或運(yùn)算亏掀,并且并入answer中
            }                            //循環(huán)32次結(jié)束后忱反,1都填上后就是k的二進(jìn)制值表示方法
        }
        System.out.println(answer);
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市滤愕,隨后出現(xiàn)的幾起案子温算,更是在濱河造成了極大的恐慌,老刑警劉巖间影,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件注竿,死亡現(xiàn)場離奇詭異,居然都是意外死亡魂贬,警方通過查閱死者的電腦和手機(jī)巩割,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來付燥,“玉大人宣谈,你說我怎么就攤上這事〖疲” “怎么了闻丑?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長勋颖。 經(jīng)常有香客問我嗦嗡,道長,這世上最難降的妖魔是什么饭玲? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任侥祭,我火速辦了婚禮,結(jié)果婚禮上茄厘,老公的妹妹穿的比我還像新娘矮冬。我一直安慰自己蚕断,他們只是感情好欢伏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著亿乳,像睡著了一般硝拧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上葛假,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天障陶,我揣著相機(jī)與錄音,去河邊找鬼聊训。 笑死抱究,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的带斑。 我是一名探鬼主播鼓寺,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼勋拟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了妈候?” 一聲冷哼從身側(cè)響起敢靡,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎苦银,沒想到半個月后啸胧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡幔虏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年纺念,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片想括。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡陷谱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出主胧,到底是詐尸還是另有隱情叭首,我是刑警寧澤习勤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布踪栋,位于F島的核電站,受9級特大地震影響图毕,放射性物質(zhì)發(fā)生泄漏夷都。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一予颤、第九天 我趴在偏房一處隱蔽的房頂上張望囤官。 院中可真熱鬧,春花似錦蛤虐、人聲如沸党饮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刑顺。三九已至,卻和暖如春饲常,著一層夾襖步出監(jiān)牢的瞬間蹲堂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工贝淤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柒竞,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓播聪,卻偏偏與公主長得像朽基,于是被迫代替她去往敵國和親布隔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容