陣列中兩個只出現一次的數字

2021-08-07 16:46:36 字數 580 閱讀 7955

題目描述

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

方法1:

//二話不說,直接雜湊

class solution

}for(;iif(res[data[i]]==1)}}

};

方法二:

異或運算巧妙運用:

可以用位運算實現,如果將所有所有數字相異或,則最後的結果肯定是那兩個只出現一次的數字異或

的結果,所以根據異或的結果1所在的最低位,把數字分成兩半,每一半裡都還有只出現一次的資料和成對出現的資料

這樣繼續對每一半相異或則可以分別求出兩個只出現一次的數字

class solution

*num1=*num2=0;

for(int i=0;iif(isbit(data[i],index))

*num1^=data[i];

else

*num2^=data[i];}}

bool isbit(int num,int index)

};

找出陣列中兩個只出現一次的數字

題目 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是 o n 空間複雜度是 o 1 解題思路 這個題目的突破口在 題目為什麼要強調有乙個數字出現一次,其他的出現兩次?我們想到了異或運算的性質 任何乙個數字異或它自己都等於 0。也就是說,如...

找出陣列中兩個只出現一次的數字

問題描述 乙個陣列中除了兩個數字之外,其餘數字均出現了兩次 或偶數次 請寫出程式查詢出這兩個只出現一次的數字,要求時間複雜度為o n 空間複雜度為o 1 問題分析 這是一道很新穎的關於位運算的面試題。首先考慮這個問題的乙個簡單版本 乙個陣列中除了乙個數字之外,其餘的數字均出現兩次,請寫程式找出這個出...

找出陣列中兩個只出現一次的數字

問題描述 乙個陣列中除了兩個數字之外,其餘數字均出現了兩次 或偶數次 請寫出程式查詢出這兩個只出現一次的數字,要求時間複雜度為o n 空間複雜度為o 1 問題分析 這是一道很新穎的關於位運算的面試題。首先考慮這個問題的乙個簡單版本 乙個陣列中除了乙個數字之外,其餘的數字均出現兩次,請寫程式找出這個出...