268. Missing Number
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n
, find the one that is missing from the array.
翻译:给出一个包含n个不同数字的数组,数组中元素是从0,1,2,...,n中选取的,找到数组中缺失的数字
例1:
输入: [3,0,1] 输出: 2
例2
输入: [9,6,4,2,3,5,7,0,1] 输出: 8
学习mo10
public int missingNumber(int[] nums) {
int xor = 0, i = 0;
for (i = 0; i < nums.length; i++) {
xor = xor ^ i ^ nums[i];
}
return xor ^ i;
}
利用位操作,a^b^b =a,连续两次和同一个数做异或操作,可以消除这个数带来的影响,得到原来的值,如下代码~最后一行是,异或的结果和0做异或,这样最终也消除了开始的0带来的影响,得到缺失的数。下面评论里有人指出,这样可能会导致溢出。
public int missingNumber(int[] nums) {
int xor = 0, i = 0;
for (i = 0; i < nums.length; i++) {
xor = xor ^ i ^ nums[i];
}
return xor ^ i;
}
利用数学知识,这个太6了,就是把数字从0到n加起来,再依次减去数组中的数字,最后剩下的就是缺失的那个,这个方法太巧了。
public static int missingNumber(int[] nums) {
int sum = nums.length;
for (int i = 0; i < nums.length; i++)
sum += i - nums[i];
return sum;
}
我的渣渣代码,需要额外的空间O(n)
import java.util.HashSet;
class Solution {
public int missingNumber(int[] nums) {
HashSet<Integer> set=new HashSet<Integer> ();
for(int i=0;i<nums.length;i++) {
set.add(nums[i]);
}
for(int i=0;i<=nums.length;i++) {
if(!set.contains(i))
return i;
}
return 0;
}
}