異或的性質(zhì)是不一樣則為1,那放在本題中該怎么理解呢?這個(gè)問題在理解上的難處是異或是一個(gè)二元運(yùn)算,可是解析中沒有明確說明誰跟誰進(jìn)行異或這讓我很頭疼。
我的理解是因?yàn)橄嗤臄?shù)值會(huì)在異或的過程中互相抵消最后剩下的就是那個(gè)惟一的元素,當(dāng)然這是針對(duì)只有一個(gè)元素是惟一的而其他的都是成對(duì)出現(xiàn)的那種。
那現(xiàn)在數(shù)組中惟一的元素不止一個(gè),作者就想能不能把數(shù)組拆成兩個(gè)子數(shù)組,其中每個(gè)子數(shù)組都僅包含一個(gè)惟一的元素。
所以他說的這個(gè)異或的過程是第一個(gè)元素異或第二個(gè)元素,其結(jié)果再去異或第三個(gè)元素,以此類推。
那么關(guān)鍵是怎么進(jìn)行分組。因?yàn)檫@兩個(gè)惟一的元素肯定不同,它們異或的結(jié)果肯定不為0,從而至少有一位是1,。作者挑選出從左到右第一個(gè)1的位置。以數(shù)組中元素這一位是不是1為標(biāo)準(zhǔn)分成兩組。那問題來了,為什么這樣分,那兩個(gè)惟一的元素不會(huì)分到同一組中呢?那是因?yàn)閿?shù)組中元素的異或結(jié)果最終是這兩個(gè)唯一元素的異或結(jié)果,而它們那一位之所以為1是由于它們的那一位不同,這是異或的運(yùn)算性質(zhì)決定的,所以它倆肯定不會(huì)被分配到同一組中去。
那就OK了,此面試題解決了。