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?
给定数组包含n个独立的数字(从1到n),找到数组中缺失的那个元素。
方法一:遍历数组所有元素做累加得到一个和,让完整的0到n的和(高斯公式)减去这个和,就得到了缺失的元素。
public class Solution {
public int missingNumber(int[] nums) {
int sum=0;
int n=nums.length;
for(int i=0;i<nums.length;i++){
sum+=nums[i];
}
return (n+1)*n/2-sum;
}
}
方法二:借鉴了方法一的思想,但是分别计算了i与索引i处的差值,累加得到的差值就是缺失的数字。防止和值太大超出int范围。
public class Solution {
public int missingNumber(int[] nums) {
int ret=nums.length;
for(int i=0;i<nums.length;i++){
ret+=(i-nums[i]);
}
return ret;
}
}
方法三:利用hash表来存储。
方法四:利用异或。让0到n(即nums.length)和数组中的所有数进行异或运算,最后得到的结果就是缺失的数。
public class Solution {
public int missingNumber(int[] nums) {
int res=nums.length;
for(int i=0;i<nums.length;i++){
res=res^nums[i]^i;
}
return res;
}
}