題目描述:給一個整數(shù)數(shù)組馏予,其中除了一個元素外每個元素都出現(xiàn)兩次乐尊,找出這個只出現(xiàn)一次的元素。要求時間復(fù)雜度O(n)劫灶,空間O(1)裸违。
分析:設(shè)一個數(shù)組記錄每個數(shù)的出現(xiàn)次數(shù)如 c[nums[i]] ++,可滿足線性的時間復(fù)雜度本昏,但是空間為O(n)供汛。或者可以先排序凛俱,在遍歷一遍紊馏,若出現(xiàn)nums[i] != nums[i + 1] 則找到了料饥,但是時間復(fù)雜度O(nlgn)蒲犬。利用位運(yùn)算的性質(zhì):
一個數(shù)異或另一個數(shù)偶數(shù)次還是原數(shù)。
任何數(shù)與0異或還是原數(shù)岸啡。
任何數(shù)與1異或是其相反數(shù)原叮。
代碼:
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;
}
};