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

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

相关推荐
Omigeq1 天前
1.4 - 曲线生成轨迹优化算法(以BSpline和ReedsShepp为例) - Python运动规划库教程(Python Motion Planning)
开发语言·人工智能·python·算法·机器人
网络工程小王1 天前
【大模型(LLM)的业务开发】学习笔记
人工智能·算法·机器学习
y = xⁿ1 天前
【Leet Code 】滑动窗口
java·算法·leetcode
WBluuue1 天前
数据结构与算法:二项式定理和二项式反演
c++·算法
nianniannnn1 天前
力扣104.二叉树的最大深度 110. 平衡二叉树
算法·leetcode·深度优先
_深海凉_1 天前
LeetCode热题100-只出现一次的数字
算法·leetcode·职场和发展
nianniannnn1 天前
力扣206.反转链表 92.反转链表II
算法·leetcode·链表
澈2071 天前
哈希表实战:从原理到手写实现
算法·哈希算法
旖-旎1 天前
哈希表(存在重复元素||)(4)
数据结构·c++·算法·leetcode·哈希算法·散列表
Run_Teenage1 天前
Linux:认识信号,理解信号的产生和处理
linux·运维·算法