【问题标题】:Finding missing number in an array在数组中查找缺失的数字
【发布时间】:2016-11-07 19:17:44
【问题描述】:

我希望有一个函数可以浏览任意大小的自然数数组 ({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 的总和,然后从这个总和中分别减去数组中的每个数字。然而,程序返回总和而不减去数组中的数字。

为什么它不能正常工作?

【问题讨论】:

  • for(i=0;t[i];i++) 这完全没有意义 - 你是说for(i = 0; i < r; i++)吗?

标签: c++ arrays loops for-loop


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 2011-11-11
    • 2017-11-07
    • 1970-01-01
    • 2014-04-19
    • 2015-07-20
    • 2011-01-07
    相关资源
    最近更新 更多