面试必考真题-算法篇 牛客网
位运算 数组 数学
题目描述
从0,1,2,…,n这n+1个数中选择n个数,组成有序数组,找出这n个数中缺失的那个数,要求O(n)尽可能小。
示例:
输入 | 返回值 |
---|---|
[0,1,2,3,4,5,7] | 6 |
题目分析:
因为是有序数组,所以采用二分法进行查找。同时,因为他的元素与其序号相同,所以可以利用序号来进行判断,当找到序号和当前元素值不同的时候,即找到了这个缺失数字。
下面是Java代码
import java.util.*;
public class Solution {
/**
* 找缺失数字
* @param a int整型一维数组 给定的数字串
* @return int整型
*/
public int solve (int[] a) {
// write code here
if(a.length == 0){
return 0;
}
int len = a.length;
int left = 0 , right = len -1;
while(left < right){
int mid = left + (right - left)/2;
if(a[mid] == mid){
left = mid +1;
}else if(a[mid] > mid){
right = mid;
}
}
return left;
}
}