陣列中出現一次的數字

2021-08-05 23:04:45 字數 909 閱讀 5106

題目:

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o(n),空間複雜度是o(1)。

分析:

我們可以先考慮乙個稍微簡單點的情況,乙個整型陣列裡除了乙個數字之外,其他的數字都出現了兩次。這是上面題目的乙個簡化版本。我們只要能解決這個問題了,然後將上面題目中的陣列按照某種規則分別分成兩個只有乙個數字出現一次的陣列,就可以解決上面的題目。

所以,現在我們面臨的是兩個問題:

1.如何在乙個整型陣列中找到僅出現一次的那個數。

2.如何將題目中的整形陣列分成兩個只有乙個數字出現一次的陣列。

對於第乙個問題,我們可以使用異或來解決,異或的性質是乙個數異或自己本身就會消失,所以我們只有連續異或這個陣列中的每個數字,最後異或出來的結果就是陣列中僅出現一次的那個數。

第二個問題,如果我們將有兩個僅出現一次的數字的陣列中的每個元素都異或一次,那麼異或的結果就是陣列中僅出現一次的那兩個數的異或結果,而這個結果肯定不為0,我們可以在這個結果數字中選取某一位,將題目中的陣列分成這一位為0的和這一位不為0的兩部分,分別對每一部分求解即可。

class solution

}unsigned

int findfirstbitis1( int num )

return indexbit;

}bool isbit1( int num, unsigned

int indexbit )

};int main( void )

; int num1 = 0, num2 = 0;

cout

<< num1 << num2 << endl;

return

0;}

統計序列中出現一次的數字

統計出現一次的數字 其它數字只出現兩次 include stdafx.h include include include using namespace std unsigned int firstbitis1 int num int k 0 for num 2 0 num 2 return k u...

陣列中只出現一次的數字

何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。輸入 每個測試案例包括兩行 第一行包含乙個整數n,表示陣列大小。2 n 10 6。第二行包含n個整數,表示陣列元素,元素均為int。輸...

陣列中只出現一次的數字

來自劍指offer 分析 如果整型陣列中只有乙個數字出現一次,我們只需將陣列中每個元素依次做異或操作,最終就得到了只出現一次的數字。因為自己與自己異或後,結果為0.現在,陣列中有兩個數字只出現一次,上述一次遍歷後將所有元素異或得不到那兩個數字。因此,我們試著將原陣列分成兩個子陣列,使每個子陣列中分別...