查找數(shù)組中惟一出現(xiàn)奇數(shù)次的數(shù)

問題描述

  • 數(shù)組中只有一個數(shù)出現(xiàn)了奇數(shù)次,其它數(shù)都出現(xiàn)了偶數(shù)次,找到這個出現(xiàn)了奇數(shù)次的數(shù)

解決方法

  • 方法1:循壞遍歷,統(tǒng)計每個數(shù)出現(xiàn)的次數(shù),直到找到出現(xiàn)奇數(shù)次的數(shù)
  • 方法2:數(shù)組中所有數(shù)異或的結果就是出現(xiàn)奇數(shù)次的數(shù)

實現(xiàn)代碼

#include <stdio.h>

/* solution 1 */
int odd_times_num1(int *a, size_t len)
{
        int i, j, cnt;

        for(i=0; i<len; i++) {
                cnt = 1;
                for(j=0; j<len; j++) {
                        if(i == j) continue;
                        if(a[i] == a[j]){
                                cnt++;
                        }
                }
                if(cnt%2) break;
        }
        return a[i];
}

/* solution 2 */
int odd_times_num2(int *a, size_t len)
{
        int i, x = 0;

        for(i=0; i<len; i++) {
                x = x^a[i];
        }

        return x;
}

int main(int argc, char** argv)
{
        int i   = 0;
        int len = 0;
        int a[]={-1, 0, 1, -1, 0, 1, 3, 4, 3, 4, 1};

        len = sizeof(a)/sizeof(int);
        for(i=0; i<len; i++){
                printf("%2d ", a[i]);
        }
        printf("\n");

        printf("odd times num: %i\n", odd_times_num1(a, len));
        printf("odd times num: %i\n", odd_times_num2(a, len));
        return 0;
}

異或

  • 還是異或大法好
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容