在线编译器 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 = N - M + 1; int count[num] = {0}; for (int digit = M; digit <= N; digit++) { for (int i = 0; i < n; i++) { if (a[i] == digit) { count[digit - M] = 1; } } } for (int i = 0; i < num; i++) { if (count[i] == 0) { return i + M; } } } int main() { return 0; }
这段代码试图在一个整数数组中找出缺失的数字。它先找出数组中的最小值和最大值,然后创建一个计数数组,标记从最小值到最大值之间每个数字是否出现,最后返回第一个未出现的数字。

- 你的 `count` 数组大小是 `num`,但 `num` 可能为0(当 `n` 为0时)。如果数组为空,`M` 和 `N` 的初始值 `a[0]` 会越界,需要处理边界情况。
- 函数 `find_missing` 在找不到缺失数字时没有返回值。如果数组是连续的(例如 `[1,2,3]`),循环结束后不会执行 `return`,这会导致未定义行为。