在数组中查找缺少的数字

时间:2016-11-07 19:17:45

标签: c++ arrays loops for-loop

我想要一个能够浏览任何大小的自然数字数组({0,1,2 ....})并找到缺失值的函数。

我的意思是,如果数组是例如:{0,1,3,4,5}我希望函数返回2,如果数组是{1,3,0,4}我想要函数返回2等等......

我的尝试是:

int missing(int* t, int r) {
    int i;
    int sum=0;
    sum=(r+1)*(r+2)/2;
    for(i=0;t[i];i++){
        sum-=t[i];
    }
    return sum;
}

我们的想法是首先计算从1到n的和,然后分别从数组中减去每个数字。但是,程序返回总和而不减去数组中的数字。

为什么它无法正常工作?

1 个答案:

答案 0 :(得分:2)

使用条件i < r代替t[i]。序列的第一个值为零,因此不遍历循环

此外,您可以使用优化版本的算法(遗憾的是我没有机会测试代码 - 这只是对排序数组的想法)

int res = 0;
for (int i = 0; i < r && t[i] == res; ++i, ++res) ;