在线编译器 C

#include <stdio.h> int find_missing(int n, int a[]) { int M = a[0], N = a[0]; for (int i = 0; i < n; i++) { if (a[i] < M) { M = a[i]; } if (a[i] > N) { N = a[i]; } } int num = M - N + 1; int count[num] = {0}; for (int digit = M; digit < N; digit++) { for (int i = 0; i < n; i++) { if (a[i] == digit) { conut[digit - M] = 1; } } } for (int i = 0; i < num; i++) { if (count[i] == 0) { return i + M; } } } int main() { return 0; }
这段代码试图在一个整数数组中找到缺失的数字,但存在几个问题。

代码的思路是:先找到数组中的最小值和最大值,然后创建一个计数数组,标记从最小值到最大值之间哪些数字出现过,最后找出未出现的数字并返回。

- 第13行 `int num = M - N + 1;` 这里计算数组范围时,如果M是最小值、N是最大值,应该用 `N - M + 1`,而不是 `M - N + 1`。当前写法会导致num为负数或零,后续数组创建会出错。

- 第16行 `conut[digit - M] = 1;` 这里变量名写成了 `conut`,但之前定义的数组名是 `count`,拼写不一致会导致编译错误。

- 第15行的循环条件 `digit < N` 会漏掉最大值N本身,应该改为 `digit <= N` 才能检查所有数字。