陣列中只出現一次的數字

2021-10-03 22:38:00 字數 1194 閱讀 1045

題目描述

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。

思路1:用map

key是陣列裡的數字,value隨便啥值

遍歷陣列的過程中,如果map裡沒有這個key那就加進來,如果發現已經存在,那就踢掉這個key

最後map裡存的就是倆只獨秀

class

solution

map<

int,

int>

::iterator it = m.

begin()

;*num1 =

(it)

->first;

*num2 =

(++it)

->first;}}

;

思路2:異或

異或的性質:

相等的數字異或 得0

0和任何數字異或 得 這個數本身

那麼取乙個數,用來存放這陣列所有數字異或的結果,過程就像養蠱,得出乙個蠱王

這個蠱王就是那倆獨秀的異或結果

在同一位,如果異或得1,那麼倆數在這位絕對不同

根據這位所在的位置

可以把原陣列分成兩組,

一類是那位是1的數,一類是那位是0的數

顯然每組存的都是相同的數字群加上乙個獨秀

這時再對每組養蠱,就能得到這倆蠱王 獨秀啦

class

solution

//找1的位置

int pos =0;

while

(pos <32)

//根據位置看是不是1,然後分組

vector<

int> data1;

vector<

int> data2;

for(

int i =

0;i < data.

size()

;i++

)//兩組分別養蠱,得出兩個蠱王

*num1 =0;

for(

int i =

0;i < data1.

size()

;i++

)*num2 =0;

for(

int i =

0;i < data2.

size()

;i++)}

};

陣列中只出現一次的數字

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

陣列中只出現一次的數字

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

陣列中只出現一次的數字

package com.google.android public static void main string args int result new int 2 find data,result for int i result private static void find int dat...