3 數字陣列中只出現一次

2021-09-07 01:41:06 字數 926 閱讀 4693

稱號:輸入乙個整數陣列,除了兩個數的陣列出現一次以外,現在的時間是其他人物出現2次要,求兩個數字。

它需要的時間複雜度o(n),空間複雜度o(1)

1 題目要求時間複雜度為o(n)而且空間複雜度為o(1)。這個時候樸素的方法利用數字來記錄出現次數的方案都是不行的。

2 依據題目的特點,僅僅有兩個數出現一次,其他的全部資料都是出現2次。假設這兩個數是a和b,那麼對這個陣列異或的結果就是a^b。如今我們就是要考慮怎麼把陣列分成兩部分,一部分含有a。一部分含有b,則每部分異或的結果即為兩個數a和b的值

3 由於a肯定不等於b。所以a^b的結果肯定不會等於0,那麼我們能夠就去這個異或結果中最右邊的第乙個1的位置,依據這個位置來劃分這個陣列。這個位置是1的位一部分。不是1的分為一部分。

4 比如陣列,陣列異或的結果為2,二進位制位0010最右邊1的位置為第二位。

則我們把陣列分成兩部分中每乙個數的二進位制最右邊第二位為1,剩下一部分中每乙個數二進位制最右邊第二位為0。

5 求出兩部分之後我們就能夠直接對每部分求異或就可以求出兩個數的值

//找到兩個僅僅出現一次的數

//空指標和個數小於2都是不合法的資料

if(arrnum == null || n < 2)

//先求出總的異或的值

int sum = 0;

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

//找到sum的右邊第乙個1的位置

int pos = 0;

while((sum & 1) != 1 && (pos <= 32))

//沒有找出第乙個1的位置

if((pos == 0) || (pos > 32))

//定義兩個數為

int numone = 0;

int numtwo = 0;

//列舉求出

int num = 1<

劍指offer 陣列中只出現一次的數字(陣列)

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。這題想到用map,類似於 陣列中出現次數超過一半的陣列 其中,data i 是key值,出現次數count為value值。方法一 這個方法比較容易想到,思路也比較簡單。這個就是典型的用空間換時間了,時間複雜...

陣列中只出現一次的數字

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

陣列中只出現一次的數字

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