剑指offer——如何从一个0——n的递增数组找到缺失的数

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。

那么我们应该从哪下手呢?首先我们要知道,数组的元素个数就是其最大值,如果数组没有缺失,其最大值应该是元素个数减一,所以如果我们创建两个变量,分别是sum1,sum2,一个保存数组的元素之和,一个保存0——数组最大值的和,两者相减,得出的数就是其缺失的数,因为数组和是0——n的和减去缺失的数,而sum2则是0——n的和,两者的差值刚好为缺失的数。

下面是代码,新手写的,略有不足。

int missingNumber(int* nums, int numsSize){

    int i=0;

    int sum1=0,sum2=0;

    for(i=0;i<=numsSize;i++)

    {

        sum1+=i;

        if(i

        {

            sum2+=nums[i];

        }

    }

    return sum1-sum2;

}

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