题目描述:
给出一个包含 0, 1, 2, ..., n
中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。
案例 1
输入: [3,0,1] 输出: 2
案例 2
输入: [9,6,4,2,3,5,7,0,1] 输出: 8
注意事项:
您的算法应该以线性复杂度运行。你能否仅使用恒定的额外空间复杂度来实现它?
贡献者:
特别感谢 @jianchao.li.fighter 用于添加此问题并创建所有测试用例。
解题思路:
这个题目思路有很多:
思路1:
用等差数列求和的方式算出前n个数的和,然后依次减去数组中的没一个数,最后剩下的就是缺失的数值。
思路2:
新建一个长度为n的数组arr都是0,然后依次遍历一遍nums,把相应位置的0变成1,然后遍历一下arr看看哪个地方还是0,那么这个地方的下表对应的数就是缺失的数值了。
代码实现的是思路1的方式。
代码实现(Java语言):
class Solution {
public int missingNumber(int[] nums) {
int n = nums.length + 1;
int sum = n*(n - 1)/2;
for(int i = 0;i < nums.length;i++){
sum = sum - nums[i];
}
return sum;
}
}