面试题 17.04. 消失的数字 - 力扣(LeetCode)https://leetcode.cn/problems/missing-number-lcci/
目录
面试题 17.04. 消失的数字 - 力扣(LeetCode)
题目
解题(注释)
第一种方法
第二种方法
第三种方法
题目
数组nums
包含从0
到n
的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
注意:本题相对书上原题稍作改动
示例 1:
输入:[3,0,1] 输出:2
示例 2:
输入:[9,6,4,2,3,5,7,0,1] 输出:8
解题(注释)
第一种方法
int missingNumber(int* nums, int numsSize) {
// 异或--找单生狗那种思想,两个循环分别遍历
int ret = 0;
for (int i = 0; i < numsSize; i++) {
ret ^= nums[i];
}
for (int j = 0; j <= numsSize; j++) { // 0-9 == 10个元素
// 小于等于刚好十个元素
ret ^= j;
}
return ret;
}
//1 2 3 4 5 6 7 8 9
//1 2 3 4 5 6 7 8
//0 0 0 0 0 0 0 0 1
第二种方法
int missingNumber(int* nums, int numsSize) {
//思路2:等差数列(项数*(首项+尾项))/2
int sum = ((numsSize+1)*(0+numsSize))/2;//等差数列计算我们的前n项的和
for(int j = 0;j<numsSize;j++){
sum -= nums[j];
}
return sum;
}
第三种方法
int missingNumber(int* nums, int numsSize) {
// 思路1:将所有的数字加起来sum,然后再用sum依次减去我们数组中的数
int sum = 0;
for(int i = 0;i<numsSize+1;i++){
sum +=i;
}
return sum;
}