【乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。】
方法一:採用stl中的multiset 容器
1、分析
因為陣列中只有兩個數字只出現一次,其他數字都出現兩次,可以使用 multiset 中的 count() 函式來找出。
2、**
class
solution
bool flag=
true
;for
(multiset<
int>
::iterator it=mp.
begin()
;it!=mp.
end(
);it++)if
(mp.
count
(*it)==1
)}}}
;
方法二:
1、分析
因為陣列中只有兩個數字出現一次,其他的數字都出現了兩次,所以對該陣列進行異或操作,結果一定是只出現一次的這兩個數進行異或的結果。因為其他的數字都出現了兩次,相同的數字進行異或結果為0。這樣可以將該陣列分成兩個子陣列,每個子陣列中只有乙個出現一次的數字,其他的數字均出現兩次。這樣對兩個子陣列進行異或操作後的結果就是只出現一次的那個數了。
將該數字分成兩個子陣列,且每個子陣列只含乙個出現一次的數字,需要首先找到陣列異或的結果中第乙個1的位置,然後將每個數字的該位置的數與其進行比較,該位為1的數字在一組,該位為0的數字在一組。這樣便可以將其合理的分開來。
2、**
class
solution
unsigned
int firstindex=
getfirstindex
(exor)
;*num1=0,
*num2=0;
for(
int i=
0;isize()
;++i)
}//求第一次出現1的位置
unsigned
intgetfirstindex
(int num)
return index;
}//分組的判讀依據
bool
isbitone
(int k,
unsigned
int index)
};
陣列中只出現一次的數字
何海濤 劍指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...