缺失数字

给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。

示例 1:
输入: [3,0,1]
输出: 2
示例 2:
输入: [9,6,4,2,3,5,7,0,1]
输出: 8


//排序后检查
public int MissingNumber(int[] nums) {
    Array.Sort(nums);
    if(nums.Length == 0 || nums[0] == 1) return 0;
    for(int i = 0;i<nums.Length - 1;i++)
    {
        if(nums[i] - nums[i+1] != -1)
        {
            return nums[i] + 1;
        }
    }

    return nums[nums.Length-1]+1;
}


//高斯求和
public int MissingNumber(int[] nums) {
    int sum = 0;
    for(int i = 0;i<nums.Length;i++)
    {
        sum += nums[i];
    }

    //因为第一个元素为0,所以...
    return nums.Length * (nums.Length+1)/2 - sum;
}


//异或法
public int MissingNumber(int[] nums) {
    int xor = 0;
    int i = 0;
    for(;i<nums.Length;i++)
    {
        //和相同的数异或两次为本身,和0异或为本身
        xor = xor ^ i ^ nums[i];
    }

    return xor ^ i;
}

首页 我的博客
粤ICP备17103704号