目录
题目来源
面试题 17.04. 消失的数字 - 力扣(LeetCode)https://leetcode.cn/problems/missing-number-lcci/
函数介绍
数组
nums
包含从0
到n
的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
问题示例
输入:[3,0,1] 输出:2输入:[9,6,4,2,3,5,7,0,1] 输出:8
函数实现1(比较)
1、给数组nums从小到达排序
2、比较数列0~n和nums
3、返回不同的数字
代码实现
int missingNumber(int* nums, int numsSize)
{
int temp;
for (int i = 0; i < numsSize; i++)
{
for (int j = numsSize-1; j > i; j--)
{
if (nums[j] < nums[j - 1])
{
temp = nums[j];
nums[j] = nums[j - 1];
nums[j - 1] = temp;
}
}
}
for (int i = 0; i < numsSize; i++)
{
if (i != nums[i])
return i;
}
}
函数实现2(求和、做差)
1、nums里的数字求和得到 sum1
2、数列0~n求和得到sum2
3、返回sum2-sum1
代码实现
int missingNumber(int* nums, int numsSize)
{
int sum1 = 0;
int sum2 = 0;
for (int i = 0; i < numsSize; i++)
{
sum1 += nums[i];
}
for (int i = 0; i < numsSize + 1; i++)
{
sum2 += i;
}
return sum2 - sum1;
}
函数实现3(异或)
数组nums里的数字和0~n数字异或
代码实现
int missingNumber(int* nums, int numsSize)
{
int x = 0;
for (int i = 0; i < numsSize; i++)
x = x ^ nums[i];
for (int i = 0; i < numsSize + 1; i++)
x = x ^ i;
return x;
}
用法示例
#include<stdio.h>
//int missingNumber(int* nums, int numsSize)
//{
// int x = 0;
// for (int i = 0; i < numsSize; i++)
// x = x ^ nums[i];
// for (int i = 0; i < numsSize + 1; i++)
// x = x ^ i;
// return x;
//}
//
//int missingNumber(int* nums, int numsSize)
//{
// int sum1 = 0;
// int sum2 = 0;
// for (int i = 0; i < numsSize; i++)
// {
// sum1 += nums[i];
// }
// for (int i = 0; i < numsSize + 1; i++)
// {
// sum2 += i;
// }
// return sum2 - sum1;
//}
int missingNumber(int* nums, int numsSize)
{
int temp;
for (int i = 0; i < numsSize; i++)
{
for (int j = numsSize-1; j > i; j--)
{
if (nums[j] < nums[j - 1])
{
temp = nums[j];
nums[j] = nums[j - 1];
nums[j - 1] = temp;
}
}
}
for (int i = 0; i < numsSize; i++)
{
if (i != nums[i])
return i;
}
}
int main()
{
int nums[3] = { 3,0,1 };
int size = 3;
//int nums[10] = { 9,6,4,2,3,5,7,0,1 };
//int size =9;
printf("%d", missingNumber(nums, size));
return 0;
}