• Leetcode Missing Number


    Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array.

    For example,
    Given nums = [0, 1, 3] return 2.

    Note:
    Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?


    解题思路:

    方法一:求和法。算出0..n 的和然后减去数组中值的和,就是Missing Number

    方法二:Bit Manipulation,用异或。类似Leetcode Single Number

    既然0到n之间少了一个数,我们将这个少了一个数的数组合0到n之间完整的数组异或一下,那么相同的数字都变为0了,剩下的就是少了的那个数字了。


    Java code:

    方法一:

    public class Solution {
        public int missingNumber(int[] nums) {
           int n = nums.length;
           int sum = n * (n + 1) / 2;
           for(int i = 0; i < n; i++) {
               sum -= nums[i];
           }
           return sum;
        }
    }

    方法二:

    public class Solution {
        public int missingNumber(int[] nums) {
            int result = 0;
            for(int i = 0; i < nums.length; i++){
                result ^= (i+1) ^ nums[i];
            }
            return result;
        }
    }

    Reference:

    1. http://www.cnblogs.com/grandyang/p/4756677.html

    2. https://leetcode.com/discuss/61256/java-missing-number-solution-o-1-space-and-n-time-complexity

  • 相关阅读:
    bzoj 4260REBXOR
    bzoj 1009GT考试
    cf 621E. Wet Shark and Blocks
    cf 507E. Breaking Good
    cf 766#
    bzoj 3732Network
    bzoj 4300绝世好题
    bzoj 4345[POI2016]Korale
    bzoj 4236JOIOJI
    bzoj 4237稻草人
  • 原文地址:https://www.cnblogs.com/anne-vista/p/4899674.html
Copyright © 2020-2023  润新知