描述:给出一个包含 0 .. N 中 N 个数的序列,找出0 .. N 中没有出现在序列中的那个数。
样例
N = 4
且序列为 [0,
1, 3]
时,缺失的数为2
。
思路:数组是0 - (N-1)个数,先把数组从小到大排序,然后用等差数列求和公式计算出0-N个数的和,最后用求出来的和依次减去数组中的每个数,剩下的数就是缺失的数。注意当数组只有0或者只有1的处理
import java.util.Arrays;
public class Solution
{
public int findMissing(int[] nums)
{
Arrays.sort(nums);
int n = nums.length;
int sum = nums[n - 1] * (n + 1) / 2;
if (n == 0)
return 0;
else if (n == 1)
return nums[0] == 0 ? 1 : 0;
for (int i = 0; i < nums.length; i++)
{
sum = sum - nums[i];
}
return sum;
}
}
但是有一些数据过不了,比如N+1的数却无法找出,因为不在范围之内,于是我只能改变下顺序。 public class Solution
{
public int findMissing(int[] nums)
{
int n = nums.length;
if (n == 0)
return 0;
else if (n == 1)
return nums[0] == 0 ? 1 : 0;
int sum = 0;
for (int i = 0; i < nums.length; i++)
sum += nums[i];
return n * (n + 1) / 2 - sum;
}
}
这样做不仅不用排序,而且能够解决N+1的数