數組中兩個數只出現一次

題目:

一個整型數組裏除兩個數字之外,其他數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。要求時間複雜度是O(n),空間複雜度是O(1)。

解析:

利用位運算的異或關係求解,把兩個只出現一次的數分別放入兩個數組中(有出現兩次的必須放在一個數組),再對這兩個數組分別使用異或,即可求出這個兩個只出現一次的數。

參考答案:

class Solution{
public:
	vector<int> singleNumbers(vector<int> nums){
		int s = 0;
		for(int n: nums)
			s ^= n;
		int k = s & (-s);
		vector<int> arr(2, 0);
		for(int n : nums){
			if(k & n)
				arr[0] ^= n;
			else
				arr[1] ^= n;
		}
		return arr;
	}
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章