要找出数组中未出现的最小正整数,可以使用以下步骤:

  1. 初始化一个布尔数组:创建一个布尔数组 exists,其长度为 n+1(其中 n 是给定数组的最大值),用于标记从 1 到 n 的数字是否在数组中出现。

  2. 标记出现的数字:遍历给定的数组,对于数组中的每个数字 x,将 exists[x] 设置为 true

  3. 找出未出现的最小正整数:从 1 开始遍历 exists 数组,找到第一个 exists[i]falsei,这个 i 就是未出现的最小正整数。

下面是一个简单的算法实现:

def firstMissingPositive(nums):
    n = len(nums)
    exists = [False] * (n + 1)

    for i in range(n):
        if nums[i] > 0 and nums[i] <= n:
            exists[nums[i]] = True

    for i in range(1, n + 1):
        if not exists[i]:
            return i
    return n + 1

# 示例
nums = [3, 4, -1, 1]
print(firstMissingPositive(nums))  # 输出应该是 2

这个算法的时间复杂度是 O(n),空间复杂度也是 O(n),其中 n 是数组的长度。这种方法适用于未排序的数组,并且可以处理负数和大于数组长度的正数。

class Solution {
public:
    /**
     * return the min number
     * @param arr int整型vector the array
     * @return int整型
     */
    int minNumberdisappered(vector<int>& arr) {
        // write code here
        int n = arr.size();
        if (n == 0) {
            return 1;
        }
        int nums[n];
        for (int i=0; i<n; i++) {
            nums[i] = 0;
        }
        for (int i=0; i<n; i++) {
            if (arr[i] <= n && arr[i] > 0) {
                nums[arr[i]-1] = 1;
            }
        }
        for (int i=0; i<n; i++) {
            if (nums[i] != 1) {
                return i + 1;
            }
        }
        return n + 1;
    }
};