目录
🌴时间复杂度练习
📌面试题--->消失的数字
题目描述
数组nums
包含从0
到n
的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
题目链接:面试题 17.04. 消失的数字
示例 1:
输入:
[3,0,1]
输出:
2
示例 2:
输入:
[9,6,4,2,3,5,7,0,1]
输出:
8
🌴解题思路
📌思路1:
代码展示:
int missingNumber(int* nums, int numsSize){
int* p = (int*)malloc((numsSize+1) * sizeof(int));
for(int i=0;i<=numsSize;i++)
{
p[i]=-1;
}
for(int i=0;i<numsSize;i++)
{
p[nums[i]]=nums[i];
}
for(int i=0;i<=numsSize;i++)
{
if(p[i]==-1)
{
free(p);
return i;
}
}
free(p);
return -1;
}
结果:
malloc函数用法
函数声明:
void *malloc(size_t size)
头文件: <stdlib.h>
参数:
size --- 内存块的大小,以字节为单位。
返回值:
该函数返回一个指针 ,指向已分配大小的内存。为避免内存泄漏,必须用 free() 或 realloc() 解分配返回的指针。如果请求失败,则返回 NULL。
示例:
double * pt;
pt = (double * ) malloc (30 * sizeof(double));
这段代码请求30个double类型值的空间,并且让pt指向该空间所在位置。
在释放空间时只需如下操作:
free(pt);
📌思路2:
代码展示:
int missingNumber(int* nums, int numsSize){
int x=0;
for(int i = 0;i < numsSize; ++i)
{
x ^= nums[i];
}
for(int j = 0;j < numsSize+1; ++j)
{
x ^= j;
}
return x;
}
结果:
📌思路3:
代码展示:
int missingNumber(int* nums, int numsSize){
int sum = ((numsSize + 1) * numsSize) / 2;
for (int i = 0;i< numsSize; ++i)
{
sum -=*(nums+i);
}
return sum;
}
结果:
🔥今天的分享就到这里,如果觉得博主的文章还不错的话,请👍三连支持一下博主哦🤞