消失的数字(C语言)

面试题 17.04. 消失的数字

数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?

注意:本题相对书上原题稍作改动
示例 1:

输入:[3, 0, 1]
输出:2

示例 2:

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

来源:力扣(LeetCode)

解题思路

思路一:

排序,但是时间复杂度不满足,因为最快的排序,其时间复杂度也达不到题目的要求。

思路二:

1.把从0到n的所有整数加在一起结果是sum1
2.把数组中的所有元素相加在一起结果是sum2

3.最后用sum1-sum2其结果就是缺失的那个数字

思路三:

异或(^):相同为0,相异为1(指的是二进制位)。
1 .把数组中的元素全部异或在一起 :
tmp= nums[0] ^ nums[1] ^ … ^ nums[numsSize-1]
2.用tmp异或从0到n的所有整数,其结果就是缺失的那个数字

代码实现

思路一:读者有兴趣可自己实现。

思路二:

int missingNumber(int* nums, int numsSize)
{
    int i = 0;
    int sum1 = 0;
    int sum2 = 0;
    //把从0到n的所有整数累加到sum1
    for (i = 0; i <= numsSize; i++)
    {
       sum1 += i;
    }
    //把数组中的所有元素累加在到sum2
    for (i = 0; i < numsSize; i++)
    {
       sum2 += nums[i];
    }
    return sum1 - sum2;
}

思路三:

int missingNumber(int* nums, int numsSize)
{
    int i = 0;
    int tmp = 0;
    //把数组中的元素全部异或在一起,存到tmp中
    for (i = 0; i < numsSize; i++)
    {
       tmp ^= nums[i];
    }
    //用tmp异或从0到n的所有整数
   for (i = 0; i <= numsSize; i++)
   {
       tmp ^= i;
   }
    return tmp;
}

最后本题就能很好的提交过去了。
消失的数字(C语言)_第1张图片


若本篇内容对您有所帮助,请三连点赞,关注,收藏支持下。

你可能感兴趣的:(LeetCode,leetcode,c语言)