找出奇數個數中唯一出現一次的數

2021-08-02 16:55:29 字數 868 閱讀 2470

現在有一堆奇數個數字,只有乙個出現了一次,其餘都出現了偶數次,找出這個數。

如果採用簡單遍歷的方法統計每乙個出現的次數,然後輸出次數為1的數,這樣有點複雜,時間複雜度為o(n2)。

#include

using

namespace

std;

typedef

struct num;

int main()

for (int i = 0;i < n;i++)

}if (flag)

}for (int i = 0;i < n;i++)

}cout

<< answer << endl;

}

如何才能進一步降低時間複雜度呢,這裡用到位運算異或的方法,利用數的二進位制位解決問題,相同的數字異或的結果是全0二進位制數,微觀的說,所有偶數個的數的位的值出現偶數次,最後的異或的結果必為0,這樣出現一次的數就會使這些位數出現的次數為奇數,所以最後異或的結果就是我們要找的數,時間複雜度為o(1).

異或:1與1、0與0異或為0,而1與0異或為1。

#include

using

namespace

std;

int solve(int num,int n)

return answer;

}int main()

for (int i = 0;i < n;i++)

int answer = solve(num,n);

cout

<< answer << endl;

cin >> n;

}

陣列中唯一出現1次的數 唯一出現2次的數

題目 乙個整型陣列裡除了1個數字之外,其他的數字都出現了兩次,請寫程式找出這個只出現一次的數字。要求時間複雜度是 o n 空間複雜度是 o 1 例如輸入陣列 2,4,3,3,2,5 因為只有 4 這個數字只出現一次,其他數字都出現了兩次,所以輸出 4 分析 本題以及延伸題目,在劍指offer上有詳細...

找出陣列中唯一出現一次的兩個數字

一問題描述 乙個陣列中,存在兩個只出現一次的數字,其餘的數字均出現兩次。要求在時間複雜度o n 空間複雜度為o 1 的情況下找出這兩個數字。二 問題分析 此題實際考察了,對位操作的理解。首先進行簡化,考慮只有乙個陣列中,只存在出現了一次的乙個數字,其餘數字在陣列中出現兩次,試 找出這個數字。三 解決...

演算法題1 陣列中唯一出現1次的數 唯一出現2次的數

題目 乙個整型陣列裡除了1個數字之外,其他的數字都出現了兩次,請寫程式找出這個只出現一次的數字。要求時間複雜度是 o n 空間複雜度是 o 1 例如輸入陣列 2,4,3,3,2,5 因為只有 4 這個數字只出現一次,其他數字都出現了兩次,所以輸出 4 分析 本題以及延伸題目,在劍指offer上有詳細...