題目描述
乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。
方法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 問題分析 這是一道很新穎的關於位運算的面試題。首先考慮這個問題的乙個簡單版本 乙個陣列中除了乙個數字之外,其餘的數字均出現兩次,請寫程式找出這個出...