1.可以通过直接的对0-n的求和然后再减去数组中的数字得到缺少的数字如下代码(将题目中第一个问题作为案例,下同):
#include <stdio.h>
int missingnumber(int* nums, int numsize) {
int sum = 0;
//计算从 0 到 numsize 的总和
for (int i = 0; i <= numsize; ++i) {
sum += i;
}
// 减去数组中实际元素的总和
for (int i = 0; i < numsize; ++i) {
sum -= nums[i];
}
return sum;
}
int main() {
//示例用法
int nums[] = {3, 0, 1};
int numsize = sizeof(nums) / sizeof(nums[0]);
int result = missingnumber(nums, numsize);
printf(" %d\n", result);
return 0;
}
2.可以通过异或的计算来得出缺少的数字,我们知道异或计算的特性(进制运算)相同则为0,相异则为1.则可以将0-n的数字与数组内的数字全部放进一起异或,所得结果便是缺少的数字。如下代码:
#include <stdio.h>
int missingNumber(int* nums, int numsize) {
int xorSum = 0;
//使用异或运算计算从 0 到 numsize 的总和
for (int i = 0; i <= numsize; ++i) {
xorsum ^= i;
}
//异或数组中的元素
for (int i = 0; i < numsize; ++i) {
xorsum ^= nums[i];
}
return xorSum;
}
int main() {
//示例用法
int nums[] = { 3, 0, 1 };
int numsize = sizeof(nums) / sizeof(nums[0]);
int result = missingNumber(nums, numsize);
printf("%d\n", result);
return 0;
}