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;

    }
    }

  • 相关阅读:
    内部排序一
    安全的文件访问方式
    Json序列化
    对进度条的通用封装实现
    关于'//'解答
    jquery中美元符号($)命名冲突
    linux 文件属性与权限
    【层次查询】Hierarchical Queries之亲兄弟间的排序(ORDER SIBLINGS BY)
    How to create a freehand tool
    C# 获取COM对象 ProgId ClsId
  • 原文地址:https://www.cnblogs.com/mafang/p/8459858.html
Copyright © 2011-2022 走看看