博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Java】 剑指offer(53-2) 0到n-1中缺失的数字
阅读量:5290 次
发布时间:2019-06-14

本文共 900 字,大约阅读时间需要 3 分钟。

 

本文参考自《剑指offer》一书,代码采用Java语言。

更多:  

题目

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

思路

  分析易知,数组形式如下:

  如果从头到尾依次比较值与小标是否相等,时间复杂度为O(n),效率低。

  由于是排序数组,我们继续考虑使用二分查找算法,结合上图可知:

    当中间数字等于其下标时,我们在后半部分查找;

    当中间数字不等于其下标时,

    1)如果中间数字的前一个数字也不等于其下标,则在前半部分查找;

    2)如果中间数字的前一个数字等于其下标,则说明中间数字的下标即为我们所要找的数字。

 

测试算例 

  1.功能测试(缺失数字位于数组开头、中间或者结尾)

  2.边界值测试(数字只有0或1)

  2.特殊测试(null)

Java代码

//题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字//都在范围0到n-1之内。在范围0到n-1的n个数字中有且只有一个数字不在该数组//中,请找出这个数字。public class MissingNumber {	public int getMissingNumber(int[] arr) {		if(arr==null || arr.length<=0) 			return -1;		int low=0;		int high=arr.length-1;		while(low<=high) {			int mid=(low+high)>>1;			if(arr[mid]!=mid) {				if(mid==0 || arr[mid-1]==mid-1)					return mid;				high=mid-1;			}else {				low=mid+1;			}		}		return -1;	}}

  

收获

  1.同

  

更多:  

转载于:https://www.cnblogs.com/yongh/p/9958093.html

你可能感兴趣的文章
[leetcode] 309. Best Time to Buy and Sell Stock with Cooldown(medium)
查看>>
解决微信授权回调页面域名只能设置一个的问题 [php]
查看>>
数组去重一步到位
查看>>
HDU 4671 Backup Plan 构造
查看>>
linux下编译openjdk8
查看>>
【python】--迭代器生成器装饰器
查看>>
Pow(x, n)
查看>>
安卓当中的线程和每秒刷一次
查看>>
MySQL Proxy
查看>>
关于Vue的组件的通用性问题
查看>>
随机颜色值
查看>>
每日一库:Modernizr.js,es5-shim.js,es5-safe.js
查看>>
目录相关的操作
查看>>
解决虚拟机vmware安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题...
查看>>
C++----练习--引用头文件
查看>>
11.基本包装类型
查看>>
ajax连接服务器框架
查看>>
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
利用maven管理项目之POM文件配置
查看>>
用HttpCombiner来减少js和css的请问次数
查看>>