leadcode的Hot100系列--136. 只出現一次的數字

由於以前剛寫了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

相關文章
相關標籤/搜索