LeetCode:尋找丟失的數字

路上的追夢人發表於2020-12-11
給定一個包含[0,n]中n個數的陣列nums,找出[0,n]這個範圍內沒有出現在陣列中
的那個數字.

示例 1:
Input:nums=[3,0,1]
Output:2

示例 2:
Input:nums=[0,1]
Output:2
因為有2個數字,所有數字都在[0,2]之間內.

示例 3:
Input:nums=[9,6,4,2,3,1,5,7]
Output:8

解題思路:
方法1
利用等差數列求和公式求出總和,然後與陣列的總和做差.

方法2
位運算
通過異或進行,a^a=0,a^0=a
#include <iostream>
#include <vector>

using namespace std;

class Solution{
public:
    int missingnumber(vector<int>& nums){
        if(nums.empty())
           return -1;
        auto sum=nums.size()*(nums.size()+1)/2;
        for(auto& i:nums)
           sum-=i;
        return sum;
    }

    int missingornumber(vector<int>& nums){
        if(nums.empty())
           return -1;
        auto number=nums.size();
        for(auto i=0;i<nums.size();i++)
           number^=i^nums[i];
        return number;
    }
};
int main(int argc,char* argv[]){
    vector<int> nums={9,6,4,2,3,1,5,0,7};
    cout<<Solution().missingnumber(nums)<<endl;
    return 0;
}

 

相關文章