思路一:先将数组nums排序,从0开始,由小到大,然后用后面一个数减去前面一个数,如果差值为2(正常差值为1) 那么就找到这缺失的数字
c语言中有个快排函数qsort可对数组进行排序
注意到qsort函数中有四个参数
示例:
#include <stdio.h>
#include <stdlib.h>
运行结果:
而由于快排函数qsort的时间复杂度为
是大于O(n),所以此方法不符题意。
思路二:可求0~n的累加和,然后减去数组所有元素的和,得到的值就为缺失的数字
程序示例:
此方法
是比较合适的方法。
思路三:如果数组中值是x,就在另一个数组中第x个位置存储该数值
程序示例:
此方法符合题意,但是不如思路二好
思路四:首先定义一个变量x,然后赋值0,先让x跟0~n所有的数异或
异或运算符是指: 参加运算的两个二进位同号,则结果为0(假);异号则为1(真)。即 0∧0=0,0∧1=1, 1^0=1,1∧1=0。
0异或任何数,其结果=任何数
1异或任何数,其结果=任何数取反
异或运算符的特点是:数a两次异或同一个数b(a=a^b^b)仍然为原值a.
(除此之外还可以实现两个数的交换:
a=a∧b;
b=b∧a;
a=a∧b;
)
x再跟数组中的每个数异或,最后得到的x值就是缺失的数字
程序示例:
此方法时间复杂度为O(n),符合题意