一、题目
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
示例 1:
输入: [0,1,3]
输出: 2
示例 2:
输入: [0,1,2,3,4,5,6,7,9]
输出: 8
限制:
1 <= 数组长度 <= 10000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof
二、思路
思路一:把数组里面的所有数字加起来求和,然后计算前n位数和,最后返回两数之差就可以了
思路二:数组的下标和数组的内容应该有一一对应的关系,从宏观来看,缺少一个数字,就意味着数组下标会少第n个,而对应的数组元素则正好是缺少的那个数字,巧妙的利用异或运算,可以求解
三、C语言解法
思路一
int missingNumber(int* nums, int numsSize){
int sum = ((1+numsSize)*numsSize)/2;
int arr_sum = 0;
for (int i = 0; i < numsSize; ++i) {
arr_sum += nums[i];
}
return sum - arr_sum;
}
思路二
int missingNumber(int* nums, int numsSize){
int ans=0,i=0;
for(i = 0;i<numsSize;i++){
ans ^= i;
ans ^= nums[i];
}
ans ^= i;
return ans;
}