给定一个包含[o,n]中n个数的数组 nums,找出[o,n]这个范围内没有出现在数组中的那个数。 * 示例1: * 输入:nums = [3,0,1]输出:2 * 解释:n= 3,因为有3个数字,所以所有的数字都在范围[0,3]内。2是丢失的数字,因为它没有出现在nums中。 * 示例2: * 输入:nums = [0,1]输出:2 * 解释:n = 2,因为有2个数字,所以所有的数字都在范围[O,2]内。2是丢失的数字,因为它没有出现在nums中。 * 示例3: * 输入:nums = [9,6,4,2,3,5,7,0,1]输出:8 * 解释:n =9,因为有9个数字,所以所有的数字都在范围[0,9]内。8是丢失的数字,因为它没有出现在nums中。
本题思路
思路:因为数组本身的原因,按照这个规定,一定会有缺失的元素。 * 假设一个都不缺,只要规定了数组的长度,则从0到n的和就是固定的。 * 这时,我们只需要判断,数组元素的和与固定的和是不是相等。 * 若相等,则说明缺失的元素是0, * 若不相等,则缺失的元素为两个和的差值。
下面是代码的实现
public static int disappearNumber(int [] nums){
int total = nums.length;
int sumConst = getSum(total);
int sum = 0;
for (int i = 0; i < total; i++){
sum += nums [i];
}
if (sum == sumConst){
return 0;
}
return sumConst - sum;
}
public static int getSum(int n){
if (n == 1){
return 1;
}
return n + getSum(n-1);
}
public static void main(String[] args) {
int [] nums1 = new int [] {3,0,1};
int [] nums2 = new int [] {0,1};
int [] nums3 = new int [] {9,6,4,2,3,5,7,0,1};
System.out.println(disappearNumber(nums1));
System.out.println(disappearNumber(nums2));
System.out.println(disappearNumber(nums3));
}
运行结果