剑指offer之0~n-1中缺失的数字(C++/Java双重实现)

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
限制:
1 <= 数组长度 <= 10000

2.问题分析
我们可以使用二分查找的方式来做这一题,我们知道每个索引对应相应的值,我们从题目看到,索引正常情况是等于值的,而且索引和值的关系只有索引索引对应值,索引对应值-1索引,使用二分找到索引对应值-1索引这一块然后找到缺失的数字,注意一点很容易误解的地方,比如给的数组是[0],那么缺失的数字是1,给的数组是[0,1,2],那么缺失的数字是3,因为他给的数组有一个缺失的数字。所以二分在这种情况就不奏效了,因为不存在索引对应值-1索引,所以我们还要在数组添加一个元素(这个元素是nums.size()),当上述情况出现后,最后返回的就是nums.size这个我们需要的数字

3代码实现
3.1C++代码
class Solution {
public:
int missingNumber(vector& nums) {
int l=0;
nums.push_back(nums.size());
int r=nums.size()-1;
int mid;
while(l<r)
{
mid=l+(r-l)/2;
if(nums[mid]>mid)
r=mid;
else if(nums[mid]==mid)
l=mid+1;
}
return l;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
3.2Java代码
class Solution {
public int missingNumber(int[] nums) {
int arr[]=new int[nums.length+1];
for(int i=0;i<arr.length-1;i++)
{
arr[i]=nums[i];
}
arr[arr.length-1]=arr.length-1;
int l=0;
int r=arr.length-1;
int mid;
while(l<r)
{
mid=l+(r-l)/2;
if(arr[mid]>mid)
r=mid;
else if(arr[mid]==mid)
l=mid+1;
}
return l;
}

};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

点赞

评论

分享

收藏

手机看

关注
LYZ
886

剑指offer–Java实现
剑指offer合辑之面试01-67《剑指offer》面试题 Java 代码的 Github 地址《剑指offer》面试题 Markdown 版本,包含题目、分析及代码的 Github 地址面试题2 实现单例模式面试题3 二维数组中的查找面试题4 替换空格面试题5 从尾到头打印链表面试题6 重建二叉树面试题7 用两个栈实现队列面试题8 旋转数组的最小数字面试题9 斐波那契数列…
cnmeimei的博客
31

剑指offer笔记面试题2----实现Singleton模式
题目:设计一个类,我们只能生成该类的一个实例。解法一:单线程解法 //缺点:多线程情况下,每个线程可能创建出不同的的Singleton实例 #include using namespace std; class Singleton { public: static Singleton* getInstance() { if(m_pInstance == nullptr) { …

vict_wang的博客
180

【剑指offer】单例模式C++实现
文章目录来源描述1.单线程解法2.多线程+加锁3.const static型实例4.在get函数中创建并返回static临时实例的引用5.最终方案,最简&显式控制实例销毁来源https://blog.csdn.net/huhaijing/article/details/51756225描述实现Singleton模式1.单线程解法在多线程中,仍会创建多个实例!!!#includ…
我想有个长长的名字的博客
2755

剑指offer 面试题2 Singleton模式 C++实现
参考: 1、题目来源《剑指offer 名企面试官精讲典型编程题 纪念版-何海涛 著》 2、C++设计模式——单例模式: http://www.jellythink.com/archives/82 3、C++11多线程教程:http://billhoo.blog.51cto.com/2337751/1294190题目:实现Singleton模式​ 以下内容…
剑指offer:0~n-1中缺失的数字(java)_Sunshine_liang1的…_CSDN博客
1-6

《剑指Offer——名企面试官精讲典型编程题》题目:0到n-1中缺失的数字 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内…
剑指offer:面试题53 - II. 0~n-1中缺失的数字(查找左…_CSDN博客
5-12

【剑指offer】面试题53 - II:0~n-1中缺失的数字(java) 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0…
y159_4的博客
93

《剑指Offer》Java版本 LeetCode
不太懂的孩子们的游戏二叉树二叉树中和为某一值的路径二叉搜索树与双向链表最小k个数查找数组中的逆序对链表复杂链表的复制两个链表的第一个公共结点逻辑运算数组中只出现一次的数字求1+2+3+…+n不用加减乘除做加法其他数组中出现次数超过一半的数字字符串的排列整数中1出现的次数(从1到n整数中1出现的次数)丑数匹配正则表达式…
qq_33882682的博客
50

[刷题]剑指offer C++语言刷题-多解法尝试
自己刷题时的代码,一般会尝试多种解法,都是AC的,时间超时的解法保留了,但是会注明;给大家刷题做一个参考;基于leetcode平台,但是建议搭配着用牛客,leetcode有些题目改变了原书中的题意后序发现错误会再更新,如果大家有发现错误,欢迎指正讨论啊;刷题的快乐是真的快乐,搞懂一个算法或者想到不一样的思路,想建立更好的反馈,还是多想多写多看多交流一. 编程语言#1 拷贝赋值运算符:返回值:自身引用;只有返回引用才可以连续赋值传入参数:声明为常量引用;传入实例则额外调用一次拷贝构造函数判断…
剑指Offer 53 - II. 0~n-1中缺失的数字_oykotxuyang的…_CSDN博客
7-8

剑指Offer 53 - II. 0~n-1中缺失的数字/*class Solution {public: //时间O(n),空间O(1) int missingNumber(vector& nums) { int len = nums…
《剑指offer》面试题53-II.0~n-1中缺失的数字_小李的博客-CSDN博客
6-7

0~n-1中缺失的数字一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字…
YETA的博客
93

记《剑指Offer》
本文内容基于《剑指Offer名企面试官精讲典型编程题》。1数组中重复的数字1.1不修改数组找出重复的数字(二分查找)2二维数组中的查找3 替换空格3.1合并有序数组(从右到左的思想)4 从尾到头打印链表5 重建二叉树6 二叉树的下一个节点7 用两个栈实现队列7.1用两个队列实现栈8斐波那契数列8.1青蛙跳台阶8.2矩形覆盖9 …
拼多多砍价算法09-03 随机生成砍价集合,整体递减
…剑指 Offer 53 - II. 0~n-1中缺失的数字_一只小白…_CSDN博客
7-19

【java语言】力扣系列—剑指 offer 53 - ii. 0~n-1中缺失的数字 一只小白…1 <=数组长度 <= 10000 具体代码实现如下: class solution { public int …
剑指Offer 53 - II. 0~n-1中缺失的数字(JAVA)_jingjin…_CSDN博客
6-24

【剑指offer】面试题53 - II:0~n-1中缺失的数字(java) 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0…
…剑指 Offer 53 - II. 0~n-1中缺失的数字_Activewaste-CSDN博客
7-17

【leetcode刷题笔记】:剑指 offer 53 - ii. 0~n-1中缺失的数字 activewaste 2020-07-17 21:33:47 3 收藏 分类专栏: leetcode刷题笔记 文章标签: leet…
剑指Offer 53 - II. 0~n-1中缺失的数字_ainstinct的博客-CSDN博客
7-18

剑指 offer 53 - ii. 0~n-1中缺失的数字 ainstinct 2020-07-18 15:03:37 3 收藏 分类专栏: 数据结构与算法 版权 题目:一个长度为n-1的递增排序数组中…
————————————————
版权声明:本文为CSDN博主「祈祷ovo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45737068/article/details/107487226

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值