题目描述:
给定一个包含 [0, n]
中 n
个数的数组 nums
,找出 [0, n]
这个范围内没有出现在数组中的那个数。
示例:
输入:nums = [3,0,1]
输出:2
解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。
解法:
使用长度为 n + 1的标记数组标记,遍历 nums ,相应值设置为1,最后返回标记为0的对应的数字。时间复杂度和空间复杂度为 o(n)。
代码如下:
int missingNumber(int* nums, int numsSize){
char * flg = (char *) malloc((numsSize+1) * sizeof(char));
int i;
for(i=0; i<numsSize+1; i++)
flg[i] = 0;
for(i=0; i<numsSize; i++)
flg[nums[i]] = 1;
for(i=0; i<numsSize+1; i++)
if(flg[i] == 0)
return i;
return -1;
}