zoukankan      html  css  js  c++  java
  • 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;

    }
    }

  • 相关阅读:
    位运算
    方法重载
    基本数据类型与引用数据类型参数
    带返回值方法的定义格式
    return使用
    方法的通用格式
    方法定义的格式
    google chrome developer tools
    Skolelinux
    ajax
  • 原文地址:https://www.cnblogs.com/mafang/p/8459858.html
Copyright © 2011-2022 走看看