劍指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不用加減乘除做加法
題目鏈接:

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
