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;
}
}
}
解法一比解法二快一些