剑指offer 56. 0到n-1中缺失的数字

简介: 剑指offer 56. 0到n-1中缺失的数字

题目描述


一个长度为 n−1 的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围 0 到 n−1 之内。

在范围 0 到 n−1 的 n 个数字中有且只有一个数字不在该数组中,请找出这个数字。


数据范围

1≤n≤1000

样例

输入:[0,1,2,4]
输出:3


方法一:二分法 O(logn)


观察题目,可以在缺失元素前面的所有元素下标和数值都是相等的,而从该分界线往后则是数值比下标大 1 。


所以,我们可以通过二分法来找到第一个下标与数值不想等的位置,该下标就是 0~n-1 缺失的数字,这其实相等于去求一个数值与下标不相等的左边界。


特殊情况: 当所有数都满足 nums[i] == i 即数组中所有元素的数值都等于其对应的下标时,缺失的元素就是 n 。


07af7e464a8343a5bf85dddd2ed4993c.png


class Solution {
public:
    int getMissingNumber(vector<int>& nums) {
        if (nums.empty())    return 0;
        int l = 0, r = nums.size() - 1;
        while (l < r)
        {
            int mid = l + r >> 1;
            if (nums[mid] != mid)    r = mid;
            else    l = mid + 1;
        }
        if (nums[r] == r)  r++;
        return r;
    }
};


欢迎大家在评论区交流~

目录
相关文章
|
1天前
|
Python
用四个数字实现不重复的三位数如何用python实现
主要是利用三个循环,三个嵌套循环让三个数字组合,如果是三个不同的数字就可以打印出来,同时用一个sum来统计他们的个数,最后将print置于最右打印出总数。
|
1天前
leetcode-41:缺失的第一个正数
leetcode-41:缺失的第一个正数
19 0
|
1天前
剑指Offer LeetCode 面试题53 - II. 0~n-1中缺失的数字
剑指Offer LeetCode 面试题53 - II. 0~n-1中缺失的数字
17 0
|
9月前
|
算法
LeetCode-41 缺失的第一个正整数
LeetCode-41 缺失的第一个正整数
|
10月前
|
安全 Cloud Native
【刷题日记】357. 统计各位数字都不同的数字个数
本次刷题日记的第 30 篇,力扣题为:357. 统计各位数字都不同的数字个数 ,中等
|
11月前
|
算法 安全 Swift
LeetCode - #41 缺失的第一个正数
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
|
11月前
|
算法
leetcode:41.缺失的第一个正数
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。
37 0
|
算法 Java 索引
0~n-1中缺失的数字(剑指offer 53-II)
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
力扣刷题记录——459.重复的字符串、461. 汉明距离、476. 数字的补数
力扣刷题记录——459.重复的字符串、461. 汉明距离、476. 数字的补数
118 0
力扣刷题记录——459.重复的字符串、461. 汉明距离、476. 数字的补数
|
算法
每日一题之缺失的第一个正数
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题这个月进度是数据结构,让大家练到各种各样的数据结构题目,熟悉数据结构的增删改查,一年以后,蜕变成为一个不一样的自己!
49 0