首页 > 其他分享 >力扣---剑指 Offer 53 - II. 0~n-1中缺失的数字

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

时间:2023-03-20 22:34:52浏览次数:37  
标签:right return nums int Offer mid 53 --- left

一个长度为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

限制:
1 <= 数组长度 <= 10000
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/que-shi-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


 

哈希表,直接遍历,位运算,二分查找,都可以做。

由于已经排好序了,二分查找应该是最快的(大概吧),而且不改变原数组的结构。

class Solution {
    public int missingNumber(int[] nums) {
        // 边界问题
        if (nums[0] == 1) {
            return 0;
        } else if (nums[nums.length - 1] == nums.length - 1) {
            return nums.length;
        }
        int len = nums.length;
        int left = 0;
        int right = len - 1;
        int mid = 0;
        while (left < right) {
            mid = (left + right) / 2;
            if (nums[mid] > mid) {
                right = mid - 1;
                // 遇到边界
                if (right < 0) {
                    return 0;
                    // 遇到答案
                } else if (nums[right] == right) {
                    return right + 1;
                }
            } else {
                left = mid + 1;
                // 边界
                if (left >= len) {
                    return len;
                    // 答案
                } else if (nums[left] > left) {
                    return left;
                }
            }
        }
        return -1;
    }
}

 

 一大堆if判断,其实重新整理思路后发现很多都是没有必要的,优化后的代码如下:

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

 

标签:right,return,nums,int,Offer,mid,53,---,left
From: https://www.cnblogs.com/allWu/p/17238181.html

相关文章

  • adb命令启动报错Error: unknown command '-start'怎么办
    大家好,每天记录小问题.水滴石穿.今天介绍一个从0开始启动app应用的app命令adbshellam-start-w-n包名/启动名第一次运行时报错  怎么办呢,这边使用的是雷电......
  • 华为datacom-HCIA学习之路
    华为datacom-HCIA​​​华为datacom-HCIA1​​​​​1.第四弹4​​​​​1.1.OSPF4​​​​​1.1.1.动态路由5​​​​​1.1.1.1.距离矢量路由协议5​​​​​1.1.......
  • go语言学习-标准库template和http
    templatehtml/template包实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出。它提供了和text/template包相同的接口,Go语言中输出HTML的场景都应使用text/template......
  • vue-element-admin安装趟坑
    1、下载源码2、执行npminstall--registry=https://registry.npm.taobao.org如果遇到"gitls-remote-h-t"之类的错误,执行以下代码:gitconfig--globalurl."htt......
  • openstack(-)
    一、OpenStack是一款开源的云操作系统,可以控制整个数据中心的大型计算、存储和网络资源池,从而实现软件定义数据中心。它将资源抽象、重组、重分配,以服务的方式对外提供服务1......
  • 设计模式(二十六)----行为型模式之备忘录模式
    1概述备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,很多软件......
  • python - tesseract-ocr
    1.安装tesseract-ocr下载链接:https://digi.bib.uni-mannheim.de/tesseract/安装后添加环境变量测试安装情况2.安装pytesseractpip3installpytesseract-ihttps......
  • acwing532. 货币系统
    题目来源acwing题目难度3星算法标签完全背包+高等代数参考程序#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;constint......
  • 剑指Offer 29.顺时针打印矩阵——学习笔记
    题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:输入:matrix=[[1......
  • Vscode Espressif IDF: ESP-IDF and tools found, configuring the extension 解决办
    VscodeEspressifIDF扩展一直在LOADING原因是Pythonpip源的问题,修改为国内的源!(CMD管理员模式)pipconfigsetglobal.index-urlhttp://mirrors.aliyun.com/pypi/......