You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻找数组缺失元素的算法疑问:为何不能采用直接比对法?

问题:找出1到N中缺失的数字

给定整数N和一个长度为N-1的数组,数组包含1到N中的N-1个不重复数字,需要找出1到N里没出现在数组中的那个数字。

导师的O(n²)解法

我的导师用双重循环的线性搜索实现了这个功能,时间复杂度为O(n²),代码如下:

// 外层循环遍历1到N的所有数字
for (int i = 1; i <= N; i++) {
    // 标记当前数字是否在数组中存在
    int flag = 0;

    // 内层循环线性搜索数组
    for (int j = 0; j < N - 1; j++) {
        if (a[j] == i) {
            // 找到数字,标记为存在
            flag = 1;
            break;
        }
    }

    // 如果标记为0,说明当前数字缺失,返回它
    if (flag == 0) return i;
}

我的疑问与代码

我搞不懂为什么不能直接遍历数组,对比下标对应的预期值?我写的代码如下:

for (int i = 0; i < n; i++) {
   if (a[i] != i + 1) {
      return i;
      break;
   }
}

问题出在哪?

你的代码逻辑只有在数组严格按1、2、3……N的顺序排列时才会生效,但题目根本没说数组是有序的!

举个例子:假设N=5,数组是[2,1,4,5],缺失的数字是3。按你的代码遍历:

  • 当i=0时,a[0]=2,i+1=1,两者不相等,你会直接返回0,这明显错误——缺失的是3,不是0。

题目只保证数组包含1到N中的N-1个数字,没规定顺序,所以你的解法不适用所有情况。

内容的提问来源于stack exchange,提问作者sankar_chaitanya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:27:03