題目連結:
題目大意:
給定 N(2 ≦ N ≦ 1, 000, 000,且 N 為偶數),代表小王有好幾種積木,每種積木的數量都是偶數個。總計有 N 個積木。而現在小王遺失了一塊積木。所以有 N-1 個積木。
接下來有 N - 1 列的數字,每個數字代表某一個積木的編號(種類),求缺少的那塊積木的編號。
範例輸入:
8
1
2
3
2
3
4
4
範例輸出:
1
解題思維:
首先,我們先觀察XOR(異或是)運算的特性,以下以 ⊕ 作為XOR運算子:
0 ⊕ X = X —— 1式
X ⊕ X = 0 —— 2式
X ⊕ Y = Y ⊕ X —— 3式
再回頭看看我們題目,所有積木都是數字,而且每種積木幾乎都是偶數個(剛好只有缺一塊積木)。因此我們可以運用XOR運算的特性來找到遺失的積木。
一開始設一變數X為0,然後接著把所有讀到的積木之編號,與之作XOR運算。
可以從1式、2式看到,由於積木是偶數個,相同編號(種類)的就會抵銷掉變為0。而從3式可以看到,運算順序是可以交換的,不會影響結果。
因此,以上的運算做完後,X會留有一個值。而那個值便是遺失的那塊積木的編號(種類),因為相同種類的積木之數量為奇數,因此XOR運算時無法全部抵銷,故留了下來(也就是X的值)。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。