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;

}
}

 

posted @ 2018-02-22 19:07  同销万古愁  阅读(119)  评论(0编辑  收藏  举报