消失的数字题解
原题
原题链接:https://leetcode.cn/problems/missing-number-lcci/
提示:正文开始
一、排序+查找
思路:使用冒泡排序后再对数组遍历,如果下一个数字不是上一个数字+1,则消失的数字为上一个数字加一。
但是冒泡排序的空间复杂度为O(N^2),快速排序qsort的空间复杂度为O(N*logN),
不符合题目要求,故不代码实现
二、按位异或秒杀
基础知识
0^x=x
0^0=0
1^2 ^ 3^5 ^ x=1^ 2^ 3^ 4 ^5(异或具有交换律)
int missingNumber(int* nums, int numsize)
{
int x = 0;
for (int i=0;i<numsize;++i)
{
x ^= nums[i];
}
for (int i=0;i<numsize+1;++i)
{
x ^= i;
}
return x;
}
结果
三.0~N等差数列求和,减去数组元素和
改方法空间复杂度也为O(N)
代码如下(示例):
int missingNumber(int* nums, int numsize)
{
int x = (numsize + 1) * numsize / 2;//等差数列求和
for (int i = 0; i < numsize; ++i)
{
x -= nums[i];
}
return x;
}
in
运行结果
结语
我们一起刷题,我们一起变强