268. 丟失的數字

簡單 位運算 數組 哈希表 數學 二分搜 排序

思路

因為亦或操作會將相同的數值對消,所以只要將「所有元素」與「缺一個數後的所有元素」做亦或,缺失的多出來的數字就會被剩下來。

  • [1,2,3,4,5,6,8,9,10][1, 2, 3, 4, 5, 6, 8, 9, 10],缺失7
  • [1,2,3,4,5,6,7,8,9,10][1, 2, 3, 4, 5, 6, 7, 8, 9, 10],完整。

將兩個陣列做亦或,相同的數字都被對消,剩下缺失的數字7。

程式碼

位運算

class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int n = nums.size();
        int xor_all = 0;
        for(int i = 0; i < n; ++i) {
            xor_all ^= i;
            xor_all ^= nums[i];
        }
        return xor_all ^ n;
    }
};

複雜度分析

  • 時間複雜度:O(n)O(n)
  • 空間複雜度:O(1)O(1)

顯示設定

背景線條
顯示背景網格線條
懸停發光
滑鼠懸停時顯示霓虹效果
聚光燈
跟隨滑鼠的聚光燈效果
背景透明度
開啟透明玻璃效果
主題顏色
自訂主要顏色