当前位置: 首页 > news >正文

力扣268.丢失的数字

给定一个包含 [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 = [9,6,4,2,3,5,7,0,1]

输出:8

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

提示:

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

方法一:排序 

class Solution {
public:
    int missingNumber(vector<int>& nums) {
        //对数组进行排序
        sort(nums.begin(),nums.end());
        int n=nums.size();       
        for(int i=0;i<n;i++)
        {
            //判断下标是否等于对应的值
            if(nums[i]!=i)
            //如果不是返回i
            return i;
        }
        //下标是从0开始的,n是从1开始算的所以返回的不是n-1
        return n;
    }
};

方法二:哈希集合

class Solution {
public:
    int missingNumber(vector<int>& nums) {
        //set中的元素是有序的(默认升序)
        //unordered_set中的元素是无序的
        //set用于插入删除和查找
        unordered_set<int> set;
        int n = nums.size();
        for (int i = 0; i < n; i++) 
        {
            //insert用于插入新元素
            set.insert(nums[i]);
        }
        int missing = -1;
        for (int i = 0; i <= n; i++) 
        {
            //检查无序集合set是否存在i
            if (!set.count(i)) 
            {
                //set中不存在i时,i就是丢失元素
                missing = i;
                break;
            }
        }
        return missing;
    }
};

方法三:位运算

class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int res = 0;
        int n = nums.size();
        for (int i = 0; i < n; i++) {
            res ^= nums[i];
        }
        for (int i = 0; i <= n; i++) {
            res ^= i;
        }
        return res;
    }
};

方法四:数字

class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int n = nums.size();
        //利用等差数列求和公式计算出从零到n所有整数的总和
        int total = n * (n + 1) / 2;
        int arrSum = 0;
        for (int i = 0; i < n; i++) 
        {
            arrSum += nums[i];
        }
        return total - arrSum;
    }
};

http://www.dtcms.com/a/107935.html

相关文章:

  • 树莓派超全系列文档--(16)无需交互使用raspi-config工具其三
  • 【微知】ARM CPU是如何获取某个进程的页表的?(通过TTBR寄存器,MMU进行处理)
  • 基于javaweb的SSM+Maven校园共享自行车管理系统设计与实现(源码+文档+部署讲解)
  • 基于策略模式的CATIA元素显隐控制工具开发实践——PySide6与PyCATIA深度整合方案
  • 什么是PID控制?
  • FFmpeg命令详解
  • 波动率 计算学习 离散系数
  • 【JavaScript】十四、轮播图
  • 探索Ark-TS语言:什么是Ark-TS?如何入门?有什么基础容易上手?
  • 系统分析师备考启动
  • HashMap底层采用数组+链表而非数组+数组的设计,主要基于以下原因及两者的对比:
  • docker安装ngnix
  • diffusion-vas 提升遮挡区域的分割精度
  • openEuler24.03 LTS下安装Flume
  • 动态规划:第一弹(第N个泰波那契数列、使用最小花费爬楼梯、解码方法)
  • AI安全:构建负责任且可靠的系统
  • leetcode287.寻找重复数
  • 【开发问题记录】回流(Reflow) 和 重绘(Repaint)
  • C++的UDP连接解析域名地址错误
  • React PDF 预览终极优化:30 页大文件不卡,加载快如闪电!
  • 【机器学习】嘿马机器学习(算法篇)第14篇:决策树算法,学习目标【附代码文档】
  • Bigemap手机app数据照片同步至电脑教程
  • 数据结构初阶:二叉树的前中后序三种遍历(递归的暴力美学)
  • 3D意识(3D Awareness)浅析
  • 【Spring Boot 与 Spring Cloud 深度 Mape 之一】剖析 Spring Boot 核心:从快速构建到自动配置原理与实战
  • 零基础 LangGraph 多智能体开发
  • 使用mysqldump进行远程mysql本地定时备份
  • 模板模式——设计模式
  • 记一个.NET AOT交叉编译时的坑
  • 18认识Qt坐标系