题目链接:https://leetcode.com/problems/missing-number/
题目
Given an array containing n distinct numbers taken from 0, 1, 2, …, n, find the one that is missing from the array.
For example,
Given nums = [0, 1, 3] return 2.
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
解法思路
注:给出数组为乱序
由于需要O(n)的时间复杂度,O(1)空间复杂度,乱序数组排序再判断肯定行不通,于是从整体上看,已知个数的自然数数列,和是固定的,所以用(n+1项和 - 数组总和)就可以得出空缺数字。
缺陷:没有处理sum溢出的可能性。
代码
public int missingNumber(int[] nums) {
int sum = 0;
int len = nums.length;
for (int i : nums) {
sum += i;
}
return len * (len + 1) / 2 - sum;
}
改进:
public int missingNumber(int[] nums) {
int sum = nums.length * (nums.length + 1) / 2;
for (int i : nums) {
sum -= i;
}
return sum;
}