136. Single Number

題目描述:給一個整數數組,其中除了一個元素外每個元素都出現兩次,找出這個只出現一次的元素。要求時間復雜度O(n),空間O(1)。

分析:設一個數組記錄每個數的出現次數如 c[nums[i]] ++,可滿足線性的時間復雜度,但是空間為O(n)。或者可以先排序,在遍歷一遍,若出現nums[i] != nums[i + 1] 則找到了,但是時間復雜度O(nlgn)。利用位運算的性質:

  1. 一個數異或另一個數偶數次還是原數

  2. 任何數與0異或還是原數

  3. 任何數與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;
    }
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容