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

news/2024/11/23 3:19:57/

摘要

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

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

一、二分法

排序数组中的搜索问题,首先想到二分法解决。根据题意,数组可以按照以下规则划分为两部分。

  • 左子数组: nums[i]=i;
  • 右子数组: nums[i]≠i ;

缺失的数字等于“右子数组的首位元素” 对应的索引;考虑使用二分法查找 “右子数组的首位元素”。

算法解析:

  • 初始化: 左边界 i=0,右边界 j=len(nums)−1;代表闭区间 [i,j] 。
  • 循环二分: 当 i≤j时循环 (即当闭区间 [i,j]为空时跳出);
  •         计算中点 m=(i+j)//2 ,其中 "//" 为向下取整除法;
  •         若 nums[m]=m ,则 “右子数组的首位元素” 一定在闭区间 [m+1,j]中,因此执行 i=m+1;
  •         若 nums[m]≠m ,则 “左子数组的末位元素” 一定在闭区间 [i,m−1]中,因此执行 j=m−1;
  • 返回值:跳出时,变量i 和j分别指向 “右子数组的首位元素” 和 “左子数组的末位元素” 。因此返回i即可。

class Solution {public int missingNumber(int[] nums) {int i = 0, j = nums.length - 1;while(i <= j) {int m = (i + j) / 2;if(nums[m] == m) i = m + 1;else j = m - 1;}return i;}
}

复杂度分析:

  • 时间复杂度 O(logN): 二分法为对数级别复杂度。
  • 空间复杂度 O(1): 几个变量使用常数大小的额外空间。

二、位运算

数组 nums中有n−1个数,在这 n−1个数的后面添加从0 到 n−1的每个整数,则添加了n个整数,共有 2n−1个整数。

在 2n−1个整数中,缺失的数字只在后面n个整数中出现一次,其余的数字在前面n−1个整数中(即数组中)和后面 n个整数中各出现一次,即其余的数字都出现了两次。

根据出现的次数的奇偶性,可以使用按位异或运算得到缺失的数字。按位异或运算⊕满足交换律和结合律,且对任意整数 x都满足x⊕x=0和x⊕0=x

由于上述 2n−1个整数中,缺失的数字出现了一次,其余的数字都出现了两次,因此对上述 2n−1个整数进行按位异或运算,结果即为缺失的数字。

class Solution {public int missingNumber(int[] nums) {int xor = 0;int n = nums.length + 1;for (int i = 0; i < n - 1; i++) {xor ^= nums[i];}for (int i = 0; i <= n - 1; i++) {xor ^= i;}return xor;}
}

复杂度分析

  • 时间复杂度:O(n),其中n是数组 nums的长度加1。需要对 2n−1个数字计算按位异或的结果。
  • 空间复杂度:O(1)。

博文参考


http://www.ppmy.cn/news/26004.html

相关文章

51单片机最强模块化封装(5)

文章目录 前言一、创建timer文件,添加timer文件路径二、timer文件编写三、模块化测试总结前言 今天这篇文章将为大家封装定时器模块,定时器是工程项目中必不可少的,希望大家能够将定时器理解清楚并且运用自如。 一、创建timer文件,添加timer文件路径 这里的操作就不过多…

【图神经网络】图拉普拉斯滤波器如何实现全通、低通、高通滤波

【图神经网络】图拉普拉斯滤波器如何实现全通、低通、高通滤波 文章目录【图神经网络】图拉普拉斯滤波器如何实现全通、低通、高通滤波1. 前言2. 符号说明3. 三种滤波3.1 全通滤波3.2 低通滤波3.2.1 平滑信号分析3.2.2 广义拉普拉斯平滑滤波器3.3 高通滤波4. 总结1. 前言 GCN&…

贴吧手机端防删图GIF动态图制作解析

贴吧存活 思路技术运气 1&#xff1a;防删图不是存活的绝对因素&#xff0c;除了防删图&#xff0c;还有账号&#xff0c;ip&#xff0c;内容&#xff0c;吧的问题 2&#xff1a;一个图不是每个吧都可以发 3&#xff1a;一个贴不被删不仅仅看图片 4&#xff1a;有时候运气也很…

[Android Studio] Android Studio Virtual Device(AVD)虚拟机的功能试用

&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Android Debug&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Topic 发布安卓学习过程中遇到问题解决过程&#xff0c;希望我的解决方案可以对小伙伴们有帮助。 &#x1f680;write…

2023美国大学生数学建模竞赛C题思路解析(含代码+数据可视化)

以下为2023美国大学生数学建模竞赛C题思路解析&#xff08;含代码数据可视化&#xff09;规则&#xff1a;猜词&#xff0c;字母猜对&#xff0c;位置不对为黄色&#xff0c;位置对为绿色&#xff0c;两者皆不对为灰色。困难模式下的要求&#xff1a;对于猜对的字母&#xff08…

分布式光伏储能系统的优化配置方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Gradle安装部署与基础入门详解

【1】Gradle简介 Gradle 是一款Google 推出的基于JVM、通用灵活的项目构建工具&#xff0c;支持Maven&#xff0c;JCenter 多种第三方仓库;支持传递性依赖管理、废弃了繁杂的xml 文件&#xff0c;转而使用简洁的、支持多种语言(例如&#xff1a;java、groovy 等)的build 脚本文…

【GStreamer 】 TX1中CPU和GPU解码显示海康相机RTSP流

大家好&#xff0c;我是虎哥&#xff0c;今天找了一套海康的相机&#xff0c;想后续测试一下DeepStream用网络相机RTSP流做输入看看后续目标识别和分类。但是还是想先实时看看视频&#xff0c;当然&#xff0c;可以选择VLC去查看&#xff0c;顺道我也用GStreamer 来测试了一下&…