码迷,mamicode.com
首页 > 其他好文 > 详细

268. Missing Number

时间:2018-02-22 21:41:12      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:ssi   integer   leetcode   .com   str   iss   pos   port   ini   

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;

}
}

 

268. Missing Number

标签:ssi   integer   leetcode   .com   str   iss   pos   port   ini   

原文地址:https://www.cnblogs.com/mafang/p/8459858.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!