题目描述
给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。
示例 1:
输入: [3,0,1]
输出: 2
示例 2:
输入: [9,6,4,2,3,5,7,0,1]
输出: 8
方法一
这个方法比较好想到,就是比较占用额外空间。可以建立一个新的数组,大小刚好比现有的数组大1,然后循环现有数组,将数组中的每个值作为新数组的下标,将其对应值设为1,没有的设为0,然后循环新数组,找到0所在的下标即可。
class Solution {
public int missingNumber(int[] nums) {
int[] number=new int[nums.length+1];
for(int i=0;i<nums.length;i++){
number[nums[i]]++;
}
for(int i=0;i<number.length;i++){
if(number[i]==0){
return i;
}
}
return 0;
}
}
用时1ms。
方法二
可以利用求和的方式,然后和1到n项的数列和对比,相差的数就是缺的这个数,但这样可能会溢出,可以稍加改动,用边加边减的方式,最后剩下的值取绝对值即为所得。
class Solution {
public int missingNumber(int[] nums) {
int sum=0;
int i;
for( i=0;i<nums.length;i++){
sum+=nums[i]-i;
}
sum-=i;
return Math.abs(sum);
}
}
用时1ms。