优选算法_丢失的数字_位运算_C++

一.题目解析

算法1:哈希表

我们要找到一个没有的数字,先把nums存入hash表中,对比缺失的数字是哪个

代码实现

cpp 复制代码
class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int n=nums.size();
        unordered_map<int,int>hash(n);
        int count=0;
        for (int num : nums) //将数组存入哈希表
        {
            hash[num] = true;
        }
        for(int i=0;i<=n;i++)
        {
            if(!hash.count(i))return i;
        }
        return -1;
    }
};

算法优化:在对比hash表的时候可以使用二分查找

算法优化:

cpp 复制代码
class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int n=nums.size();
        unordered_map<int,int> hash(n);
        for(int num:nums)
        {
            hash[num]=1;
        }
        int left=0,right=n;
        while(left<right)
        {
            int mid=left+(right-left)/2;
            if(hash.count(mid))left=mid+1;
            else right=mid;
        }
        return left;
    }
};

算法2:高斯求和

缺失的数字是在一个连续相邻的即0~n中,显然和减去数组和即是结果

代码实现:

cpp 复制代码
class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int n=nums.size();
        int sum=0;
        for(int i=0;i<n;i++)
        {
            sum+=nums[i];
        }
        int sum1=(0+n)*(n+1)/2;
        int ret=sum1-sum;
        return ret;
    }
};//高斯求和

算法三:位运算

^(异或)的性质是"消消乐"即a^a=0,所以我们异或上一个连续的数组,相同的消除,留下的即是结果\

代码实现:

cpp 复制代码
class Solution {
public:
    int missingNumber(vector<int>& nums) {
        
        int ret=0;
        int n=nums.size();
        for(int i=0;i<n;i++)
        {
            ret^=nums[i];
        }
        for(int i=0;i<=n;i++)
        {
            ret^=i;
        }
        return ret;
    }
};//位运算
相关推荐
List<String> error_P8 小时前
蓝桥杯最后几天冲刺:暴力大法(一)
算法·职场和发展·蓝桥杯
SkyXZ~9 小时前
Jetson有Jtop,Linux有Htop,RDK也有Dtop!
linux·运维·服务器·rdkx5·rdks100·dtop
Tanecious.9 小时前
蓝桥杯备赛:Day6-B-小紫的劣势博弈 (牛客周赛 Round 85)
c++·蓝桥杯
迈巴赫车主9 小时前
蓝桥杯3500阶乘求和java
java·开发语言·数据结构·职场和发展·蓝桥杯
流云鹤9 小时前
Codeforces Round 1090 (Div. 4)
c++·算法
小菜鸡桃蛋狗9 小时前
C++——string(上)
开发语言·c++
wljy19 小时前
第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(个人见解,已完结)
c语言·c++·算法·蓝桥杯·stl
高一要励志成为佬10 小时前
【数据结构】算法复杂度
数据结构
starvapour10 小时前
Ubuntu系统下基于终端的音频相关命令
linux·ubuntu·音视频
杨云龙UP10 小时前
Oracle Data Pump实战:expdp/impdp常用参数与导入导出命令整理_20260406
linux·运维·服务器·数据库·oracle