【Leetcode每日一题】 位运算 - 丢失的数字(难度⭐)(34)

1. 题目解析

题目链接:268. 丢失的数字

这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。

2.算法原理

首先,我们设定一个长度为n的数组。理想情况下,如果这个数组是从0到n-1的连续整数序列,那么它应该包含所有从0到n-1的整数。但是,由于某种原因,数组中缺失了一个数字,因此它现在是一个不完整的序列。

我们的目标是找出这个缺失的数字。为了实现这一目标,我们可以利用异或运算的一个关键特性,即任何数和0进行异或运算,结果仍然是原来的数;而任何数和其自身进行异或运算,结果则为0。这一特性使得异或运算在解决这类问题时非常有用。

我们可以按照以下步骤来寻找缺失的数字:

  1. 初始化异或结果:首先,我们设置一个变量来保存异或运算的结果,初始值为0。这个变量将用于存储所有应该出现在数组中的数字(即从0到n-1的所有整数)的异或结果。

  2. 计算应该存在的数字的异或:接下来,我们遍历从0到n-1的所有整数,并将它们依次与异或结果变量进行异或运算。这样,我们就得到了一个包含了所有应该存在于数组中的数字的异或结果。

  3. 计算实际数组中数字的异或:然后,我们遍历数组中的每一个数字,并将它们也依次与异或结果变量进行异或运算。由于数组中的数字与前面计算出的应该存在的数字的集合相比,只有一个数字是缺失的,因此这一步操作实际上是将这个缺失的数字从异或结果中“消除”了。

  4. 得出缺失的数字:最后,由于异或运算的“消消乐”特性,最终保存在异或结果变量中的数字,就是那个在数组中缺失的数字。

通过以上步骤,我们可以有效地找出数组中缺失的那个数字,而无需显式地检查每一个可能的数字是否存在于数组中。这种算法的时间复杂度是O(n),其中n是数组的长度,因此它对于处理大规模数据集也是相当高效的。

3.代码编写

class Solution 
{
public:
    int missingNumber(vector<int>& nums) 
    {
        int size = nums.size(), ret = size;
        for(int i = 0; i < size; i++) ret ^= i ^ nums[i];
        //for(const auto &x : nums) ret ^= x;
        return ret;
    }
};

The Last

嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。

觉得有点收获的话,不妨给我点个吧!

如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~ 

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-14 05:50:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-14 05:50:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-14 05:50:03       82 阅读
  4. Python语言-面向对象

    2024-03-14 05:50:03       91 阅读

热门阅读

  1. 动态规划--砝码称重

    2024-03-14 05:50:03       36 阅读
  2. 力扣70. 爬楼梯(三种解法)

    2024-03-14 05:50:03       40 阅读
  3. 设计模式--享元模式(Flyweight Pattern)

    2024-03-14 05:50:03       41 阅读
  4. ChatGPT-4 VS 文心一言4.0

    2024-03-14 05:50:03       42 阅读
  5. STM32/GD32——CAN协议

    2024-03-14 05:50:03       41 阅读
  6. 安卓基础面试题

    2024-03-14 05:50:03       35 阅读
  7. OpenCV-图像基础处理

    2024-03-14 05:50:03       38 阅读