各位CSDN的uu们你们好呀,今天,小雅兰又开新专栏了,以后会在Leetcode上面进行刷题,尽量每天写一道,请大家监督我!!!好啦,让我们进入Leetcode的世界吧
对于这道题目,有很多种解法,接下来就由小雅兰来你们细细剖析!!!
解法一:
排序,依次查找,如果下一个数不是上一个数+1,那么上一个数+1就是消失的数字!!!
但是这种方法,时间复杂度过高,不符合力扣的要求
利用冒泡排序的话,时间复杂度为O(N^2)
利用qsort(快速排序)的话,时间复杂度为O(N*logN)
但是这道题目要求时间复杂度为O(N)
那么,这种方法就不行,那这种方法小雅兰就不写这种方法的代码啦
解法二:
异或 相同为0,相异为1
首先,把x赋值为0
for循环,让x和nums数组的每一个元素异或
然后又一个for循环,让x和0到numsSize的数字异或
最后的答案就是只出现一次的数字
最后异或的结果就是我们要求的消失的数字
int missingNumber(int* nums, int numsSize) { int i=0; int x=0; for(i=0;i<numsSize;i++) { x^=nums[i]; } for(i=0;i<numsSize+1;i++) { x^=i; } return x; }
解法三:
利用数学公式
等差数列求前n项和的公式为:Sn=n*(n+1)/2
求完和之后,减去nums数组中的所有的值,最后结果就是消失的数字啦
int missingNumber(int* nums, int numsSize) { size_t i=0; int x=numsSize*(1+numsSize)/2; for(i=0;i<numsSize;i++) { x-=nums[i]; } return x; }
好啦,小雅兰今日刷题经验就到这里啦,还要继续加油噢!!!