
LeetCode268.缺失的数
发布日期:2021-05-14 23:50:50
浏览次数:17
分类:精选文章
本文共 593 字,大约阅读时间需要 1 分钟。
数学求和公式、排序+二分以及位运算XOR,这三种方法可以用来找出数组中缺失的数字。每种方法都有其独特的优势和适用场景。
方法一:数学高斯求和公式
这种方法的思路是通过计算数组的总和与1~n的和之差来确定缺失的数。由于是从0开始计数,因此数组的长度实际上是最大值加1。去除一个数后,剩下的数可以与1~n的和对比,最终得出缺失的数字。当数组长度较小时,这种方法效率很高,且与数组大小成正比,总体复杂度是O(n),空间复杂度为O(1)。方法二:排序+二分查找
这一方法通过将数组排序,然后利用二分查找来确定缺失的位置。具体操作是先将数组按升序排序,然后在状态中进行二分查找。当找到一个节点的值与其索引不符时,可以确定缺失的位置。尽管这方法在最坏情况下可能需要较多次的比较,但在大多数情况下都是高效的。排序后的时间复杂度是O(n log n),而二分查找仅需O(log n)时间,因此整体复杂度为O(n log n),空间复杂度为O(1)。方法三:位运算XOR
这种方法利用了异或操作的特性,即两个相同的数异或结果为0。由于数组中每个元素(除缺失的那个外)都与其索引对应,因此我们可以假设一个初始值,这个值等于数组的长度(即最大索引加1)。然后,遍历数组,对每个元素与其索引进行异或操作,最终结果即为缺失的数字。这种方法支持的时间复杂度为O(n),空间复杂度为O(1),非常适合大数组处理。发表评论
最新留言
很好
[***.229.124.182]2025年04月10日 08时00分30秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ThreadLocal源码分析解密
2019-03-12
编译android源代码(aosp)
2019-03-12
Java流程控制语句
2019-03-12
wincc实现手机APP远程监控
2019-03-12
3.6.X版本的OSG无法打开osgShadow/ShadowVolume的问题
2019-03-12
vue手写 头部 滑动按钮 点击查看更多,可折叠
2019-03-12
IDEA 找不到 Persistence窗口解决办法
2019-03-12
海思SDK mkimage command not found
2019-03-12
QT5 退出窗口
2019-03-12
rk3399平台gt9xx触摸屏驱动分析
2019-03-12
Android 吸顶布局
2019-03-12
"compileDebugJavaWithJavac"错误解决
2019-03-12
维基百科之AndroidRoot
2019-03-12
SQL语言-DDL、DML、DCL
2019-03-12
import Vue from 'vue'的过程
2019-03-12
ubuntu16.04下系统配置
2019-03-12
国内有哪些比较靠谱的云服务器?
2019-03-12