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

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

相关推荐
风筝在晴天搁浅3 小时前
n个六面的骰子,扔一次之后和为k的概率是多少?
算法
MATLAB代码顾问4 小时前
Python实现蜂群算法优化TSP问题
开发语言·python·算法
代码飞天4 小时前
机器学习算法和函数整理——助力快速查阅
人工智能·算法·机器学习
jiushiapwojdap5 小时前
LU分解法求解线性方程组Matlab实现
数据结构·其他·算法·matlab
笨笨饿5 小时前
69_如何给自己手搓一个串口
linux·c语言·网络·单片机·嵌入式硬件·算法·个人开发
纽扣6675 小时前
【算法进阶之路】链表进阶:删除、合并、回文与排序全解析
数据结构·算法·链表
消失的旧时光-19436 小时前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法
智者知已应修善业6 小时前
【51单片机不用数组动态数码管显示字符和LED流水灯】2023-10-3
c++·经验分享·笔记·算法·51单片机
AI进化营-智能译站7 小时前
ROS2 C++开发系列16-智能指针管理传感器句柄|告别ROS2节点内存泄漏与野指针
java·c++·算法·ai
CS创新实验室7 小时前
从盘边到芯端——硬盘接口七十年变迁史
算法·磁盘调度