c++ 查找数组中缺少的数字

j91ykkif  于 2022-12-15  发布在  其他
关注(0)|答案(2)|浏览(171)

我希望有一个函数,可以浏览任意大小的自然数数组({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的和,然后从这个和中分别减去数组中的每个数,但是程序返回的总和没有减去数组中的数。
为什么它不能正常工作?

lnlaulya

lnlaulya1#

使用条件i < r代替t[i]。序列的第一个值为零,因此不遍历循环
此外,您可以使用算法的优化版本(不幸的是,我没有机会测试代码--这只是排序数组的想法)

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

inb24sb22#

此函数允许您查找给定数组中缺少的数字。

<?PHP

function FindMissingArr($args)
{
    $max = max($args);
    $min = min($args);

    $range = range($min, $max);

    $find = [];

    $result = array_diff($range, $args);

    foreach ($result as $key => $value) {
        array_push($find, $value);
    }

    return $find;
}~

$arr = array(1, 5, 8, 21);
print_r(FindMissingArr($arr));

?>

结果:
阵列([0] =〉2 [1] =〉3 [2] =〉4 [3] =〉6 [4] =〉7 [5] =〉9 [6] =〉10 [7] =〉11 [8] =〉12 [9] =〉13 [10] =〉14 [11] =〉15 [12] =〉16 [13] =〉17 [14] =〉18 [15] =〉19 [16] =〉20)

相关问题