劍指offer40 陣列中只出現一次的數字

2021-09-10 16:38:54 字數 1140 閱讀 5778

原理:相同的數字異或運算得到0,陣列全部異或一遍,就會得到我們需要的兩個數的異或。根據結果的二進位制,從右邊開始的第乙個1出現的index,可以把陣列分為兩個子陣列。

二進位制不是0就是1,且異或「0^0=0 1^1=0 1^0=1 0^1=1」那麼結果中我們取得index可以很好的將沒有重複的兩個數給分開。 因為兩個數的二進位制中的index位置上,肯定是不相同的

這題需要用二進位制來考慮

int data = ;

010,100,011,110,011,010,101,101

陣列全部異或(^)運算後,得到 or = 010

然後我們找到or的二進位制中第乙個位為1的下標從右邊開始,我們可以看到 bit1index = 2

然後我們找出上面第二位為1的數 ,第二位為0的數

然後每個子陣列再分別異或運算,第乙個陣列得到 6,第二個陣列得到 4

注:相同的數字異或運算得到0

static

void

(int

data)

// 找到第乙個為1的位置

int bit1index =

findfirstbit1index

(or)

;int num1 =

0, num2 =0;

for(

int datum : data)

system.out.

println

(num1 +

" "+ num2);}

static

intfindfirstbit1index

(int num)

return index;

}static

boolean

isbit1

(int num,

int index)

public

static

void

main

(string[

] args)

;(data)

;}

劍指offer 40 陣列中只出現一次的字元

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次,請寫出程式找出這兩個只出現了一次的數字,要求時間複雜度為o n 空間複雜度為o 1 此時出了迴圈,tty為兩個只出現一次的數的異或值 現在需要確定tty的最低位1在哪個bit位 int index 0 int num1 0 int num2 0...

劍指offer40陣列中只出現一次的數字

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。解題思路 將陣列分成兩個陣列,每個陣列中包含乙個只出現一次的數字,其他都為出現兩次的數字。由於這兩個只出現一次的數字不相同,所以可以根據整個陣列異或的結果和1進行與操作,作為分割兩個陣列的位置。分割為兩個陣列...

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

題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。分析 1.因為有2個數字只出現了一次,而其他的數字都是2次,通過異或運算,最後可以得到這2個只出現一次的數字的異或結果值,這個值必然不為0。2.然後找出這個數字二進位制中,最低位為1的位數,必然這...