一組數據中只有一個數字出現了一次。其他所有數字都是成對出現的。 請找出這個數字。


這題要找出只出現過一次的那個數,如果是一遍遍的遍歷對比的話那時間復雜度是非常大的,這里推薦使用異或運算。
我們知道異或運算有個特點,一個數連續兩次異或同一個數,這個數的值不變。例如5^4(0101^0100) = 1,1^4(0001^0100) = 5(0101)。這里我們可以利用這個特性,用0和數組中的各個數依次進行異或運算,那么最后得到的值就是單次出現的那個數的值。

int research_alone(int arr[9], int size)
{
    int ret = 0;
    int i = 0; 

    for (i = 0; i < size; i++)
    {
        ret = ret^arr[i];
    }
    return ret;
}

int main()
{
    int a[9] = { 4, 5, 5, 9, 7, 4, 12, 9, 7 };
    int sz = sizeof(a) / sizeof(a[0]);

    int ret = research_alone(a, sz);

    printf("這組數中單獨出現的是:%d\n", ret);
    system("pause");
    return 0;
}

這里寫圖片描述


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com