思路:
第一种:从 [0, n]
中应有n+1个数的数组,但是这个只有 n
个数的数组,假如从小到大排序,那么下标和数值应该是一样的,那么出现一个数下标和数值不相等,那么就是这个数,所以我们只需要排序就行。
第二种:更快的排序,使用哈希表,把它们存在哈希表。然后依次检查从 0到 n 的每个整数是否在哈希集合中,不在哈希集合中的数字即为丢失的数字。跟数组差不多。
第三种:利用异或。
题解:
class Solution {
public int missingNumber(int[] nums) {
Arrays.sort(nums);
for(int i = 0; i < nums.length ; i++){
if(nums[i] != i)return i;
}
return nums.length;
}
}
class Solution {
public int missingNumber(int[] nums) {
int n = nums.length;
boolean[] hash = new boolean[n + 1];
for (int i = 0; i < n; i++) hash[nums[i]] = true;
for (int i = 0; i < n; i++) {
if (!hash[i]) return i;
}
return n;
}
}
class Solution {
public int missingNumber(int[] nums) {
int [] res = new int[nums.length * 2 + 1];
for(int i = 0; i<nums.length;i++){
res[i] = nums[i];
}
for(int i = 0; i <nums.length + 1;i++){
res[i +nums.length] = i;
}
int xor = 0;
for(int i = 0; i <res.length; i++){
xor = xor ^ res[i];
}
return xor;
}
}