0~n-1中缺失的数字_优选算法(二分查找)

一.题目解析

题目中说没有重复的元素,且为单调增的.

我们可以发现这个题目有很多解法,我们简单讲一下各种方法

1.哈希表

2.暴力解法(直接遍历)

3.位运算(相同数会抵消)

4.数学方法(高斯求和法)

但是最优秀的算法其实是二分算法

要使用二分算法我们就需要找到二段性

我们发现目标左边是数字与数字下标一定是相同的,而右边是一定大于的

我们还需要考虑一个边界条件

当缺失的数字在最右边的时候,此时我们的数组就是一个来连续的,没有跳跃点的单增数组[0,1,2,3],此时缺失的是最后一个数加一,所以单left==right时.就是right+1才是最终答案

二.代码实现

cpp 复制代码
class solution
{
public:
    int missingnumber(vector<int>&nums)
    {
        int left=0,right=nums.size()-1;
        while(left<right)
        {
            int mid=left+(right=left)/2;
            if(mid==nums[mid]) left=mid+1;
            else right=mid;    
        }
        //处理边界问题
        return nums[left]=left?left+1:left
    }
}

如需要其他解法讲解:评论后期更新

相关推荐
野犬寒鸦4 分钟前
JVM垃圾回收机制面试常问问题及详解
java·服务器·开发语言·jvm·后端·算法·面试
风酥糖10 分钟前
Godot游戏练习01-第16节-游戏中的状态机
算法·游戏·godot
budingxiaomoli13 分钟前
优选算法--优先级队列(堆)
算法
Trouvaille ~15 分钟前
【优选算法篇】哈希表——空间换时间的极致艺术
c++·算法·leetcode·青少年编程·蓝桥杯·哈希算法·散列表
bbbb36515 分钟前
算法调优的多目标优化与性能平衡模型的技术8
算法
Fcy64817 分钟前
与二叉树有关算法题
算法·深度优先
️是7819 分钟前
信息奥赛一本通—编程启蒙(3346:【例60.3】 找素数)
数据结构·c++·算法
captain37620 分钟前
map和set
数据结构·算法
qq_4160187223 分钟前
实时数据可视化库
开发语言·c++·算法
格林威23 分钟前
工业相机参数解析:曝光时间与运动模糊的“生死博弈”
c++·人工智能·数码相机·opencv·算法·计算机视觉·工业相机