法 1
思路是先是从0加到n,得到 sum,再将数组中的内容相加,得到 sum1。用sum - sum1 就得到了消失的数字
int missingNumber(int* nums, int numsSize) { int sum = 0; int sum1 = 0; int i; for (i = 0; i <= numsSize; i++) { sum = sum + i; } for (i = 0; i < numsSize; i++) { sum1 = sum1 + nums[i]; } return sum - sum1; }
法 2
思路是和数组所有的数字异或,再和 0到n 的数字异或,最后就可以得到消失的数字
int missingNumber(int* nums, int numsSize) { int x = 0; int i; for (i = 0; i < numsSize; i++) { x = x ^ nums[i]; } for (i = 0; i <= numsSize; i++) { x = x ^ i; } return x; }
法 3
思路是开辟一个新的数组 a ,给数组初始化赋 -1 。将nums 数组中的值放入 a 数组对应位置,最后找出 a 数组值为 -1的,它对应的下标就是消失的数字。
int missingNumber(int* nums, int numsSize) { int b = 0; int arr[10]; int* a = arr; a = (int*)malloc(sizeof(int) * (numsSize + 1)); int i; for (i = 0; i < numsSize + 1; i++) { a[i] = -1; } for (i = 0; i < numsSize; i++) { a[nums[i]] = nums[i]; } for (i = 0; i < numsSize + 1; i++) { if (a[i] == -1) { b = i; break; } } return b; }