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

剑指 Offer 53 - II. 0~n-1中缺失的数字

原题链接

难度:easy\color{Green}{easy}easy


题目描述

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。

示例 1:

输入: [0,1,3]
输出: 2

示例 2:

输入: [0,1,2,3,4,5,6,7,9]
输出: 8

限制:

1<=数组长度<=100001 <= 数组长度 <= 100001<=数组长度<=10000


算法1

(二分)

  • 排序数组中的搜索问题,首先想到 二分法 解决,排序数组使用双指针也是高频选项~
  • 根据题意,数组可以按照以下规则划分为两部分。
    • 左子数组 nums[mid] == mid
    • 右子数组 nums[mid != mid
  • 缺失的数字等于 “右子数组的首位元素” 对应的索引;
    在这里插入图片描述
    在这里插入图片描述

复杂度分析

  • 时间复杂度O(logn)O(logn)O(logn)

  • 空间复杂度 : O(1)O(1)O(1)

C++ 代码

class Solution {
public:int missingNumber(vector<int>& nums) {// 特判 特殊情况if (nums.empty()) return 0;int n = nums.size() + 1;if (nums.back() == n - 2) return n - 1;int l = 0, r = n - 2;while (l < r) {int mid = (l + r) / 2;if (nums[mid] != mid) r = mid;else l = mid + 1;}return l;}
};

算法2

(哈希)

首先遍历数组 nums,将数组中的每个元素加入哈希集合,然后依次检查从 0 到 n−1 的每个整数是否在哈希集合中,不在哈希集合中的数字即为缺失的数字。

复杂度分析

  • 时间复杂度O(n)O(n)O(n)

  • 空间复杂度 : O(n)O(n)O(n)

C++ 代码

class Solution {
public:int missingNumber(vector<int>& nums) {unordered_set<int> hash;int n = nums.size() + 1;for (int i = 0; i < nums.size(); i ++) {hash.insert(nums[i]);}int missing = -1;for (int i = 0; i <= n - 1; i ++) {if (!hash.count(i)) {missing = i;break;}}return missing;}
};
http://www.lryc.cn/news/11489.html

相关文章:

  • 分布式id
  • 创意编程py模拟题
  • uniapp中条件编译
  • 封装 YoloV5 detect.py 成 Python 库以供 python 程序使用
  • PostgreSQL , PostGIS , 球坐标 , 平面坐标 , 球面距离 , 平面距离
  • K3S 系列文章-5G IoT 网关设备 POD 访问报错 DNS ‘i/o timeout‘分析与解决
  • 社会工程学介绍
  • 干货 | 有哪些安慰剂按钮的设计?
  • LeetCode 每日一题 2023/2/13-2023/2/19
  • SAP 关于多种语言配置
  • 万字长文讲述由ChatGPT反思大语言模型的技术精要
  • SpringBoot静态资源访问
  • 【物联网】智慧农业病虫害精准辨识竞赛思路及代码分享
  • Properties类读取配置文件
  • 知其然更要知其所以然,聊聊SQLite软件架构
  • 微服务架构的演变
  • 使用html-to-image代替html2canvas,结合jspdf实现下载pdf(下载截图下载前端dom元素)
  • 云环境渗透测试的重要性
  • ROS2 入门应用 请求和应答(Python)
  • 是德Keysight E4991A/e4991B射频阻抗/材料分析仪
  • 这才是计算机科学_人工智能
  • DFS深度优先搜索—Java版
  • RAY - 小记
  • 金三银四软件测试工程师面试题(含答案)
  • Python 连接数据源与邮件功能(九)
  • 网站如何锁定用户,超级浏览器有办法解决吗?
  • Ubuntu下使用Wine运行HBuilderX
  • 如何高效远程维护分布在海外的中大型智能设备?
  • 【双指针问题】LeetCode 925. 长按键入
  • APP测试中IOS和Android的区别,有哪些注意点?