位運(yùn)算相關(guān)的算法題

劍指offer56:數(shù)組中只出現(xiàn)一次的兩個(gè)數(shù)字

題目鏈接:

數(shù)組中只出現(xiàn)一次的兩個(gè)數(shù)字_??皖}霸_牛客網(wǎng)

本題使用的是異或運(yùn)算
異或運(yùn)算的特點(diǎn):

1.a^a = 0

2.0^a = a

*本題的技巧在于,第一次將數(shù)組遍歷異或后得到兩個(gè)目標(biāo)數(shù)的異或結(jié)果

* 找到結(jié)果中為1的那一位(按位和1相與運(yùn)算),即兩個(gè)目標(biāo)數(shù)存在區(qū)別的位

* 利用這個(gè)區(qū)分點(diǎn),可以將數(shù)組劃分為兩部分

* 對兩部分分別異或,就可以得到兩個(gè)目標(biāo)數(shù)結(jié)果

劍指offer65不用加減乘除做加法

題目鏈接:

不用加減乘除做加法_??皖}霸_??途W(wǎng)

step 1:兩數(shù)進(jìn)行與運(yùn)算可以產(chǎn)生進(jìn)位的信息

step 2:運(yùn)算后執(zhí)行左移1位就是每輪需要進(jìn)位的方案

step 3:兩數(shù)進(jìn)行異或運(yùn)算可以產(chǎn)生非進(jìn)位的加和結(jié)果

step 4:將移位后的進(jìn)位結(jié)果與非進(jìn)位結(jié)果繼續(xù)重復(fù) step 1 - step 3 的步驟,直到不再產(chǎn)生進(jìn)位為止

舉例說明:

5 + 7 = 101 + 111 = 1100

step1:101 & 111 = 101

step2:101 << 1 = 1010

step3:101 ^ 111 = 010

重復(fù)上述操作

1010 & 010 = 0010

0010 << 1 = 00100

1010 ^ 010 = 1000

00100 & 1000 = 0000

0000 << 1 = 00000

00100 ^ 1000 = 1100

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容