題目描述:給一個整數數組,其中除了一個元素外每個元素都出現兩次,找出這個只出現一次的元素。要求時間復雜度O(n),空間O(1)。
分析:設一個數組記錄每個數的出現次數如 c[nums[i]] ++,可滿足線性的時間復雜度,但是空間為O(n)。或者可以先排序,在遍歷一遍,若出現nums[i] != nums[i + 1] 則找到了,但是時間復雜度O(nlgn)。利用位運算的性質:
一個數異或另一個數偶數次還是原數。
任何數與0異或還是原數。
任何數與1異或是其相反數。
代碼:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int x = 0;
int n = nums.size();
for (int i = 0; i < n; i++)
{
x ^= nums[i];
}
return x;
}
};