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
    }
}

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

相关推荐
Wei&Yan43 分钟前
数据结构——顺序表(静/动态代码实现)
数据结构·c++·算法·visual studio code
团子的二进制世界1 小时前
G1垃圾收集器是如何工作的?
java·jvm·算法
吃杠碰小鸡1 小时前
高中数学-数列-导数证明
前端·数学·算法
故事不长丨1 小时前
C#线程同步:lock、Monitor、Mutex原理+用法+实战全解析
开发语言·算法·c#
long3161 小时前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法
近津薪荼1 小时前
dfs专题4——二叉树的深搜(验证二叉搜索树)
c++·学习·算法·深度优先
熊文豪2 小时前
探索CANN ops-nn:高性能哈希算子技术解读
算法·哈希算法·cann
熊猫_豆豆2 小时前
YOLOP车道检测
人工智能·python·算法
艾莉丝努力练剑2 小时前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
偷吃的耗子3 小时前
【CNN算法理解】:CNN平移不变性详解:数学原理与实例
人工智能·算法·cnn