【算法 | 位运算No.1】leetcode268. 丢失的数字

个人主页:兜里有颗棉花糖

欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创

收录于专栏【手撕算法系列专栏】【Leetcode

🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助

🍓希望我们一起努力、成长,共同进步。

点击直接跳转到该题目

目录

1️⃣题目描述

给定一个包含 [0, n]n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。

示例1:

输入:nums = 3,0,1

输出:2

解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 0,3 内。2 是丢失的数字,因为它没有出现在 nums 中。

示例2:

输入:nums = 0,1

输出:2

解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 0,2 内。2 是丢失的数字,因为它没有出现在 nums 中。

示例3:

输入:nums = 0,1

输出:2

解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 0,2 内。2 是丢失的数字,因为它没有出现在 nums 中。

示例4:

输入:nums = 0

输出:1

解释:n = 1,因为有 1 个数字,所以所有的数字都在范围 0,1 内。1 是丢失的数字,因为它没有出现在 nums 中。

注意:

  • n == nums.length
  • 1 <= n <= 104
  • 0 <= nums[i] <= n
  • nums 中的所有数字都 独一无二

2️⃣题目解析

总共有三种解法(哈希、位运算、高斯求和)。

这里只对位运算高斯求和进行解释。

位运算求解原理:

  • 相同数组进行异或结果为0
  • 0 ^ num = num

高斯求和原理:

  • 0,n的和记为sum1
  • 把数组nums中所有的元素之和记为sum2
  • 丢失的数字即为sum1 - sum2

3️⃣解题代码

解法1(高斯求和):

cpp 复制代码
class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int n = nums.size(),sum1 = 0,sum2 = 0;

        for(int i = 0;i < n;i++) sum1 += nums[i];
        for(int i = 0;i <= n;i++) sum2 += i;

        return sum2 - sum1;   
    }
};

解法2(位运算):

cpp 复制代码
class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int n = nums.size(),ret = 0;
        for(auto x : nums) ret ^= x;
        for(int i = 0;i <= n;i++) ret ^= i;
        return ret;
    }
};
相关推荐
小星星闪亮登场14 小时前
2026萌新联赛第三场-- (郑州轻工业大学)
数据结构·c++·经验分享·算法·贪心算法·排序算法·深度优先
冻柠檬飞冰走茶14 小时前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
玖玥拾15 小时前
LeetCode 88 合并两个有序数组
算法·leetcode
数据皮皮侠AI15 小时前
上市公司数字供应链金融指数(2010-2024)
大数据·人工智能·算法
小程故事多_8015 小时前
用GRPO算法重塑多智能体系统,从原理落地到复杂任务规划实战
人工智能·算法
Hi李耶16 小时前
【LeetCode】541.反转字符串 II
算法·leetcode·职场和发展
shylyly_16 小时前
104.二叉树的最大深度
数据结构·算法·104.二叉树的最大深度
AI科技星16 小时前
曲率‑挠率与 $\boldsymbol{\omega/c}$ 的关系、精算验证及其物理意义
c语言·开发语言·线性代数·算法·决策树·机器学习·ai科技星
沐籽李17 小时前
HuDiff在抗体人源化项目中的工程化落地
人工智能·算法·aidd·抗体设计
依然范特东17 小时前
强化学习笔记6--IS、PPO、TD、DQN、Actor-Critic
笔记·算法