面试题 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:等差数列(项数*(首项+尾项))/2int 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;
}