本文共 1615 字,大约阅读时间需要 5 分钟。
寻找整数数组中最小的未出现的正整数,可以通过以下两种方法实现。
这种方法的核心思想是利用数组的顺序关系,通过逐次检查每个数与前一个数的关系,找到最小缺失的正整数。
这种方法的优势在于代码实现相对简单,且能有效找出最小的缺失正整数。
以下是基于方法二的代码实现,修改后的版本会更简洁且易于理解:
void findMin(int A[], int n, int &result) { if (n == 0) { result = 1; return; } // 确定数值范围 int min = A[0]; int max = A[0]; for (int i = 0; i < n; i++) { if (A[i] < min) { min = A[i]; } else if (A[i] > max) { max = A[i]; } } // 确保至少有一个非负数 if (min <= 0) { min = 1; } // 标记数组 int size = max - min + 1; int present[size]; for (int i = 0; i < size; i++) { present[i] = 0; } for (int i = 0; i < n; i++) { if (A[i] < 0) { continue; } int value = A[i]; int index = value - min; if (index >= 0 && index < size) { present[index] = 1; } } // 寻找最小的未出现的数 for (int i = 0; i < size; i++) { if (present[i] == 0) { result = i + min; return; } } result = size + min; // 如果没有缺失的数}
min
和最大值max
,min
默认为数组第一个元素的值。min
小于等于0,将其调整为1,以确保数值范围从1开始。max - min + 1
,初始化所有值为0。A[i]
标记为已出现。通过这种方法,代码实现简洁且高效,逻辑清晰,适合处理各种整数数组。
转载地址:http://bpaoz.baihongyu.com/