题目描述:
解法1:
定义一个布尔类型数组,用来判断nums数组中的哪些元素存在,初始值都为false。遍历nums数组,把数组值得布尔数组位置改为true。然后遍历布尔数组,当发现哪个位置还为false,则这个位置就是nums数组中缺失得数字。
class Solution {
public int missingNumber(int[] nums) {
boolean[] flag = new boolean[nums.length+1];
for(int i = 0; i < nums.length; i++){
flag[nums[i]] = true;
}
for(int i = 0; i < flag.length; i++){
if(flag[i] == false) return i;
}
return -1;
}
}
解法2:
这种解法是通过二分查找法去找到缺少元素。只要nums[m] == m,证明m的左边包括m都没有缺少元素,那么把二分查找的范围移动到nums[m]的右边。如果不相等,那么把二分查找的范围移动到nums[m]的左边。
class Solution {
public int missingNumber(int[] nums) {
int i = 0, j = nums.length - 1;
while(i <= j) {
int m = (i + j) / 2;
if(nums[m] == m) i = m + 1;
else j = m - 1;
}
return i;
}
}