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

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

相关推荐
YuK.W5 小时前
Leetcode100: 70.爬楼梯、118.杨辉三角、198.打家劫舍
java·算法·leetcode
随意起个昵称5 小时前
状压dp-基础题目2([USACO12MAR] Cows in a Skyscraper G)
c++·算法·动态规划
Jerry6 小时前
LeetCode 1002. 查找共用字符
算法
无限的鲜花6 小时前
协程本质是函数加状态机——零基础深入浅出 C++20 协程
c++·算法·c++20
旖-旎6 小时前
《LeetCode 64 最小路径和 || LeetCode 174 地下城游戏》
c++·算法·leetcode·动态规划
森林古猿17 小时前
再论斜率优化
c++·学习·算法
万法若空7 小时前
【数学-简单数论】同余中的逆
线性代数·算法
凯瑟琳.奥古斯特8 小时前
力扣1009补码解法C++实现
开发语言·c++·算法·leetcode·职场和发展
KaMeidebaby8 小时前
卡梅德生物技术快报|蛋白的叠氮基修饰:实操解析:核酸模板耦合蛋白的叠氮基修饰实现靶蛋白定点共价标记
前端·人工智能·物联网·算法·百度
通信仿真爱好者9 小时前
第【60期】--大规模MIMO系统信号检测算法误码率比较 --matlab完整代码+参考文章
算法·matlab·mimo·信号检测