Given an array containing n distinct numbers taken from 0, 1, 2, ..., n
, find the one that is missing from the array.
For example,
Given nums = [0, 1, 3]
return 2
.
数组包含n个不同的数,这些数来自0, 1, 2, ..., n
,,找数组中缺失的值。
解题思路:先将数组排序,排序后每个元素都比前一个元素大1,缺失的值比,它前一个元素大2。如果第一个元素不是0,则缺失的是0,返回0即可;如果缺失数是最后一个的话,那整个数组都没有缺失的值,则要返回最后一个加1。
解法一:
public class Solution {
public int missingNumber(int[] nums) {
Arrays.sort(nums);
if (nums[0] == 0) {
for (int i = 0; i < nums.length-1; i++) {
if (nums[i] == nums[i+1] - 2) {
return nums[i] + 1;
}
}
return nums[nums.length-1] + 1;
}
else {
return 0;
}
}
}
解法二:
还可以排序后用二分查找的方法,如果mid值和nums[mid]相等,则前半部分不缺元素,缺失数应该在数组后边。如果不相等,说明前面已经有缺失的值,缺失数在左边。如果缺失数是最后一个的话,那整个数组都没有错位,则要返回最后一个加1。
public class Solution {
public int missingNumber(int[] nums) {
Arrays.sort(nums);
int start = 0;
int end = nums.length - 1;
while (start < end) {
int mid = (start + end) / 2;
if (mid == nums[mid]) {
start = mid + 1;
}else {
end = mid - 1;
}
}
if (nums[start] == start) {
return start+1;
}else {
return start;
}
}
}
解法一比解法二快一些