优选算法_丢失的数字_位运算_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;
    }
};//位运算
相关推荐
一只不想敲代码的程序猿8 小时前
如何更高效地拆解问题?
算法
CodeYp20198 小时前
第14讲:mmap 实现文件 LRU 缓存
linux·lru·mmap
程序开发阿元8 小时前
一台 20G 的 VPS 被日志吃掉一半:我按这个顺序查了二十分钟
linux·ssh
爱写Bug的浮游9 小时前
unique_ptr 零开销的真相与边界
c++·facebook
.冰块.9 小时前
流量大了自动加 Pod!K8s HPA 扩缩容与 ResourceQuota/LimitRange 资源管控实战
linux·云原生·容器·kubernetes·hpa·quota·limitrange
xiaoye-duck9 小时前
《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(下):流式响应实现和测试
网络·c++·语言模型·chatgpt
微尘hjx9 小时前
【Deep-OC-SORT 02】多轨迹算法Deep-OC-SORT-相对 OC-SORT 的改进点
人工智能·算法·yolo·目标跟踪·视觉检测·ultralytics·deep-oc-sort
梦帮科技9 小时前
意识启发式量子隧穿退火算法用于全局优化 (CITA) 完整技术指南
网络·人工智能·算法·量子计算·模拟退火算法
承渊政道9 小时前
Linux网络学习【深入理解多路转接select、poll的代码改写】
linux·ubuntu·select·多路转接·poll
雪落漂泊9 小时前
Linux进程(四)概念:命令行参数和环境变量篇
linux·运维·服务器