链接

https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof/
难度: #简单

题目

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

代码框架

class Solution {public int missingNumber(int[] nums) {}
}

题目解析

解答思路1:
暴力解法,for循环,
查看数字是否和数组的下标相同,
如果不相同,则缺少该下标对应的数字,
如果没有找到,则缺失的一定是最后一个数字。

解答思路2:
二分查找法,while循环,
找到第一个不和数组下标相等的数字,
根据low和high计算中间的mid,
如果mid下标对应的数字和mid相等,
则缺失的数字在右边部分,
如果mid下标对应的数字和mid不相等,
则需要进一步确定是否是第一个不相等的数字,
如果mid==0,则左边没有数字了,可以确定缺失的数字,
如果mid-1下标对应的数字和mid相等,也可以确实缺失的数字,
否则缺失的数据在左边部分。

测试用例

package edu.yuwen.sowrd.num53_II.solution;import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;import edu.yuwen.sowrd.num53_II.sol2.Solution;public class SolutionTest {/*** 输入: [0,1,3]* 输出: 2*/@Testpublic void testCase1() {Solution solution = new Solution();int[] nums = { 0, 1, 3 };int number = solution.missingNumber(nums);Assertions.assertEquals(2, number);}/*** 输入: [0,1,2,3,4,5,6,7,9]* 输出: 8*/@Testpublic void testCase2() {Solution solution = new Solution();int[] nums = { 0, 1, 2, 3, 4, 5, 6, 7, 9 };int number = solution.missingNumber(nums);Assertions.assertEquals(8, number);}/*** 输入: [0]* 输出: 1*/@Testpublic void testCase3() {Solution solution = new Solution();int[] nums = { 0 };int number = solution.missingNumber(nums);Assertions.assertEquals(1, number);}
}

解答1

package edu.yuwen.sowrd.num53_II.sol1;public class Solution {public int missingNumber(int[] nums) {for (int i = 0; i < nums.length; i++) {if (nums[i] != i) {return i;}}// 如果没有找到,则缺失的一定是最后一个数字return nums.length;}
}

解答2 推荐

package edu.yuwen.sowrd.num53_II.sol2;public class Solution {public int missingNumber(int[] nums) {int low = 0;int high = nums.length - 1;while (low <= high) {int mid = (low + high) / 2;// 如果下标和数字相等,则缺失的数字在右边部分if (nums[mid] == mid) {low = mid + 1;}// 如果下标和数字不相等,则缺失的数字在左边部分if (nums[mid] != mid) {// 确保是第一个和下标不相等的数字if (mid == 0 || nums[mid - 1] == mid - 1) {return mid;}high = mid - 1;}}// 如果没有找到,则缺失的一定是最后一个数字return nums.length;}
}

http://www.taodudu.cc/news/show-1250934.html

相关文章:

  • 04. 二维数组中的查找
  • 11. 旋转数组的最小数字
  • 50. 第一个只出现一次的字符
  • 32 - I. 从上到下打印二叉树
  • 32 - II. 从上到下打印二叉树 II
  • 32 - III. 从上到下打印二叉树 III
  • 26. 树的子结构
  • PostgreSQL数据库密码
  • SpringBoot中使用Hibernate Validator校验工具类
  • 28. 对称的二叉树
  • 解决tomcat的undeploy
  • 解决eclipse出现The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path
  • 下载安装neo4j
  • vue-drag-resize实线页面的拖拽与缩放
  • 解决IDEA不能编译XML文件
  • 播放视频和音频文件java
  • 实时获取屏幕大小
  • vue部分样式无法修改
  • vue中根据搜索内容跳转到页面指定位置
  • Duplicate entry ‘‘ for key ‘***‘
  • transferto遇到的问题java.io.FileNotFoundException: C:\Users\Administrator\AppData\Local\Temp
  • Spring的jar包下载
  • *** is required and cannot be removed from the server
  • Tomcat 服务器介绍和使用
  • 第一个 Web 程序
  • Servlet 介绍
  • 集成 Tomcat、 Servlet 的生命周期
  • Request 对象、重定向、请求转发
  • Cookie 学习
  • ServletContext对象、ServletConfig对象

53 - II. 0~n-1中缺失的数字相关推荐

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

    剑指 Offer 53 - II. 0-n-1中缺失的数字 思路一:简单for循环找 class Solution {public:int missingNumber(vector<int> ...

  2. 【算法】剑指 Offer 53 - II. 0~n-1中缺失的数字

    1.概述 剑指 Offer 53 - II. 0-n-1中缺失的数字 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一 ...

  3. 剑指 Offer 53 - II. 0~n-1中缺失的数字(二分查找)

    /*** 剑指 Offer 53 - II. 0-n-1中缺失的数字* @author wsq* @date 2020/10/08一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在 ...

  4. 剑指offer | 面试题53 - II. 0~n-1中缺失的数字

    转载本文章请标明作者和出处 本文出自<Darwin的程序空间> 本文题目和部分解题思路来源自<剑指offer>第二版 开始行动,你已经成功一半了,献给正在奋斗的我们 题目 一个 ...

  5. leetcode剑指 Offer 53 - II. 0~n-1中缺失的数字(二分查找)

    一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字. 示例 1: 输入: [0,1,3 ...

  6. 剑指Offer - 面试题53 - II. 0~n-1中缺失的数字(二分、位运算)

    文章目录 1. 题目 2. 解题 2.1 充分利用题目信息 2.2 位运算 2.3 二分查找 1. 题目 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范 ...

  7. 剑指offer面试题53 - II. 0~n-1中缺失的数字(二分查找)

    题目描述 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字. 思路 详见链接 代码 ...

  8. 【剑指offer】面试题53 - II:0~n-1中缺失的数字(java)

    一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字. 示例 1: 输入: [0,1,3 ...

  9. n-1 java_【Java】 剑指offer(53-2) 0到n-1中缺失的数字

    本文参考自<剑指offer>一书,代码采用Java语言. 题目 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内.在范围0到n-1的n个数字中有且只 ...

最新文章

  1. 【每日一算法】删除排序数组中的重复项
  2. Response.Cookie FF
  3. js储存数据sessionStorage,localStorage
  4. godot初体验,开源跨平台的神奇游戏引擎。支持python和rust,甚至推出了android端。
  5. Linux的shell脚本教程(一)
  6. 面试记录-KPMG(毕马威)
  7. win7打印机服务器修改ip,win7系统电脑更换IP地址后打印机不能打印文件了的解决方法...
  8. Nature Reviews Microbiology | 土壤微生物组与同一健康
  9. php时间转换位周月,php日周月统计代码
  10. 如何找到隐式转换的SQL?
  11. YOLOX改进之模型轻量化(Lite)
  12. 1.7-秩和相关关系
  13. 仿个人税务 app html5_全城警惕!假个税APP正在抢你的钱!
  14. Centos 6安装Maven
  15. VtigerCRM重置管理员密码
  16. 窗口置顶工具v2.4.0
  17. python实现将ip段解析为单个ip
  18. APN:使用AT+CGDCONT命令设置modem默认APN
  19. mysql单表数据列_MySQL 之 数据操作及单表查询
  20. KUKA机器人通过EthernetKRL控制

热门文章

  1. YOLO V3 原理
  2. Category类别、继承
  3. python里面的正则表达式
  4. [ci] jenkins的Timestamper插件-让日志显示时间
  5. ASP.NET MVC2 使用绑定时 等号和冒号的差别 %=%和%:%的区别
  6. 精确定位网页中各个元素的位置
  7. vue devtools 插件安装
  8. 排序方法总结C++实现
  9. TS Interface
  10. 6-3 递增的整数序列链表的插入 (10 分)