136. Single Number

136. Single Number

problem link

food for thought

這題沒有想出來,原始想法很複雜,都是因為沒有bit operation的觀念

這題運用了XOR的特性,wiki頁面中提到的:

交換律

結合律

恆等律

歸零律

自反

最佳解答中及善用了上述的特性,將所有元素XOR起來,就會回傳出落單的那個元素:

int singleNumber(int A[], int n) {
    int result = 0;
    for (int i = 0; i<n; i++)
    {
		result ^=A[i];
    }
	return result;
}

現在題目的描述是每個元素出現兩次,僅有一個元素出現一次。

但似乎原本的題目沒有敘述清楚,原先的敘述似乎是只有一個元素沒有重複出現,這樣的描述會讓重複出現的元素可以是奇數個存在,這樣上述的做法就沒有用了,因為:

A^A^A = A