剑指 Offer 53 - II:0~n-1中缺失的数字

简介: 剑指 Offer 53 - II:0~n-1中缺失的数字

题目

题目链接

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。

示例 1:

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

示例 2:

输入: [0,1,2,3,4,5,6,7,9]
输出: 8

解题

方法一:二分查找

写法一:

比如例子[0,1,2,3,5,6]

left会经过[0,1,2,3]连续区间,停止到值为5的地方,right也会停到值为5的地方。

但是left索引就是本该缺失的值4。

但是这种写法,相比写法二,只能查找缺失值非首尾的,数。

这种写法,要查找首位缺失,就要在开始,单独判断。

class Solution {
public:
    int missingNumber(vector<int>& nums) {
        if(nums[right]==right) return right+1;
        if(nums[left]==1) return 0;
        int left=0,right=nums.size()-1;
        while(left<right){
            int mid=(left+right)/2;
            if(nums[mid]==mid){
                left=mid+1;
            }
            else right=mid;
        }
        return left;
    }
};

写法二:

例子[0,1,3]

比如left=2 (指向3),right=1的时候循环中断

left索引就是缺少的数,原来本该是2,却指向了3。

class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int left=0,right=nums.size()-1;
        while(left<=right){
            int mid=(left+right)/2;
            if(nums[mid]==mid) left=mid+1;
            else right=mid-1;
        }
         return left;
    }
};
相关文章
LeetCode——剑指 Offer 53 - II【0~n-1中缺失的数字】
LeetCode——剑指 Offer 53 - II【0~n-1中缺失的数字】
LeetCode——剑指 Offer 53 - II【0~n-1中缺失的数字】
|
索引 Cloud Native
【刷题日记】剑指 Offer 53 - II. 0~n-1中缺失的数字
本次刷题日记的第 22 篇,力扣题为:剑指 Offer 53 - II. 0~n-1中缺失的数字 ,简单
【刷题日记】剑指 Offer 53 - II. 0~n-1中缺失的数字
|
C语言 索引
剑指 Offer 03. 数组中重复的数字(C)
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
剑指 Offer 03. 数组中重复的数字(C)
剑指 Offer:03. 数组中重复的数字
剑指 Offer:03. 数组中重复的数字
99 0
|
9月前
剑指 Offer 03:数组中重复的数字
剑指 Offer 03:数组中重复的数字
31 0
|
5月前
|
存储 搜索推荐 C++
剑指 Offer(第 2 版)刷题 | 03. 数组中重复的数字
本文是作者针对《剑指 Offer(第 2 版)》中 "数组中重复的数字" 问题的刷题记录,分享了使用排序算法和相邻比较大小两种方法来找出数组中的重复数字,并提供了C++的实现代码。
剑指 Offer(第 2 版)刷题 | 03. 数组中重复的数字
|
Java Python
【LeetCode每日一题】剑指 Offer 03. 数组中重复的数字(持续更新)
【LeetCode每日一题】剑指 Offer 03. 数组中重复的数字(持续更新)
99 0
|
9月前
剑指 Offer 44:数字序列中某一位的数字
剑指 Offer 44:数字序列中某一位的数字
43 0

热门文章

最新文章