标签:示例 pre span iss size 刷题记录 有序 missing 并且
题目描述
一个长度为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
思路:使用二分查找,刚开始写的算法用
mid-left和right-mid的值比较
来判断缺失值在mid的左边还是右边,但后面发现是多余的
实际上这是一个有序的升序列,我们只要判断
num[mid]==mid即可,如果等于就证明缺失值在mid的右面
如果不等于则证明缺失值在mid的左面
算法如下
public int missingNumber1(int[] nums) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
int m = (left + right) / 2;
if (nums[m] == m) {
//缺失在右边
left = m + 1;
} else {
//缺失值在左边
right = m - 1;
}
}
return left;
}
力扣刷题记录(2021.2.9) 剑指 Offer 53 - II. 0~n-1中缺失的数字
标签:示例 pre span iss size 刷题记录 有序 missing 并且
原文地址:https://www.cnblogs.com/spx88/p/14392043.html