【题目概要】
268. Missing Number
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array.
Example 1:
Input: [3,0,1]
Output: 2
Example 2:
Input: [9,6,4,2,3,5,7,0,1]
Output: 8
【思路分析】
- 给定的数值在0到n内,缺失其中一个,共有n个数,建立一个n+1的数组,遍历一次,并且以该值为下表存储在数组内,
遍历记录数组,其中值为1,则表示出现了,为0,表示缺失 - 直接计算n个数的和,减去现有n数的和,差值即为缺失的数值
【代码示例1】
int missingNumber(int* nums, int numsSize){
int *re = (int*)calloc(numsSize+1, sizeof(int));
int index;
for(index=0; index<numsSize; index++)
{
re[nums[index]]++;
}
//从后往前遍历,从前往后时,需注意边界问题
while(index >= 0 && re[index] != 0)
{
index--;
}
return index;
}
【示例代码2】
int missingNumber(int* nums, int numsSize){
int sum = (numsSize+1)*numsSize/2;
int sumnow = 0;
//注意过界问题
while(numsSize > 0)
{
sumnow += nums[--numsSize];
}
return sum-sumnow;
}