由於以前剛寫了461號題目,這個題目與那個很類似,
461號題目用異或來算兩個不同的部分,
那這個題目須要排除同樣的部分,並找到不同的部分。
那麼能夠再利用一下異或的特性:
一、相同爲0,因此,a ^ a = 0。
二、不一樣爲0,因此,0 ^ b = b。
因此,假設數組裏面的數分別就是 a,a,b,
---> a ^ a ^ b = b,那麼b就是要找的那個不同的數字。
(異或的最終結果與異或的順序無關,即 a ^ b ^ c = a ^ c ^ b = b ^ c ^ a )。
附上代碼:數組
int singleNumber(int* nums, int numsSize){ int i = 1; for (; i<numsSize; i++) { nums[0] ^= nums[i]; } return nums[0]; }
注:這裏沒有定義一個新變量,而使用nums[0]做爲返回值,是爲了節省一點執行用時(少了一次計算),少消耗點內存。
若是哪裏能夠再節省執行用時的,還請賜教!謝謝!code