找出陣列中唯二出現一次的數

2021-07-27 12:09:22 字數 765 閱讀 9372

原題取自

題目要求找出陣列中唯二出現一次的數,其餘數均只出現兩次。 要求做到演算法的時間複雜度為o(n)

解題最直接的方法是計算出陣列中每個數出現的次數,然後取其中出現一次的,但其演算法複雜度不滿足題目要求

這裡採用異或計算的方法來求解

由於 a ^a = 0,,a ^ 0 = a,

假設a、b就是題解,則 temp1 = a ^ b,

在二進位制下,temp1的每一位1表示a和b在該位不相同,我們利用temp1中的第一位1將陣列分成兩組,一組包含a,而另一組包含b

最後對每組數進行異或計算求出a,b

**如下:

temp1 -1 表示將temp1從最後一位到第一位1為止按位取反,假設這個1在第k位,

則temp1 & (temp1 - 1) 表示乙個第k位為0,其餘位與temp1相同的數

再與temp1進行異或計算,由於temp1在第k為1,

temp2 = b000……010……0,除了第k位為1外其餘位均為0

利用temp2將陣列分成第k為0和1的兩組便可得出答案

我的**在**上的測試結果

找出陣列中只出現一次的數

今天來看一道有意思的題,看起來很簡單,但是要想到滿足要求的答案沒那麼容易。有乙個非空整形陣列,除了有乙個只出現過一次的數,其他的數都出現且只出現過兩次,現要求找出這個只出現過一次的數。時間複雜度不能超過 o n 而且不能使用額外空間。大概意思就是,比如從 5,5,8,8,6,9,9 陣列中找出 6 ...

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

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

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

現在有一堆奇數個數字,只有乙個出現了一次,其餘都出現了偶數次,找出這個數。如果採用簡單遍歷的方法統計每乙個出現的次數,然後輸出次數為1的數,這樣有點複雜,時間複雜度為o n2 include using namespace std typedef struct num int main for in...