题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
方法一:
定义一个长度为n的数组result,长度从0开始。遍历nums数组,result[nums[i]] = 1。然后遍历result数组,当result[i] = 0,即i为缺失的数字。
public int missingNumber(int[] nums) {
int[] result = new int[nums.length+1];
for(int i=0;i<nums.length;i++){
result[nums[i]] = 1;
}
for(int i=0;i<result.length;i++){
if(result[i]==0){
return i;
}
}
return -1;
}
方法二:
因为数组按照递增排序,那么当数组一定会在某个元素处开始出现nums[i]!=i,即i为缺失的数字。所以遍历nums数组,找出nums[i] != i。
public int missingNumber(int[] nums) {
int i=0;
for(;i<nums.length;i++){
if(nums[i]!=i)
break;
}
return i;
}
方法三:
采用位运算,因为a^a=0,遍历nums数组.。进行nums[i]和i的异或运算,最后的结果值即为缺失的数字。
public int missingNumber(int[] nums) {
int result = 0;
for(int i=0;i<nums.length;i++){
result = result^nums[i]^i;
}
result = result^nums.length;
return result;
}