因為之前剛寫了461號題目,這個題目與那個很相似, 461號題目用異或來算兩個不一樣的部分, 那這個題目需要排除一樣的部分,並找到不一樣的部分。 那麼可以再利用一下異或的特性: 1、相同為0,所以,a ^ a = 0。 2、不同為0,所以,0 ^ b = b。 所以,假設數組裡面的數分別就是 a,a ...
因為之前剛寫了461號題目,這個題目與那個很相似,
461號題目用異或來算兩個不一樣的部分,
那這個題目需要排除一樣的部分,並找到不一樣的部分。
那麼可以再利用一下異或的特性:
1、相同為0,所以,a ^ a = 0。
2、不同為1,所以,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]作為返回值,是為了節省一點執行用時(少了一次計算),少消耗點記憶體。
如果哪裡可以再節省執行用時的,還請賜教!謝謝!