一、题目概述
二、思路方向
为了找到未排序整数数组中未出现的最小正整数,并满足时间复杂度为 O(n) 和只使用常数级别额外空间的要求,我们可以采用原地哈希(也称为索引哈希)的方法。这个方法的基本思想是将每个数字(如果它在 1 到 n 的范围内,其中 n 是数组的长度)放到它应该在的索引位置上。如果索引位置上的数字不是它本身的值加一(考虑数组索引从 0 开始),那么我们就需要调整它。
具体步骤如下:
- 遍历数组,对于每个元素
nums[i]
:
- 如果
nums[i]
不在 1 到 n 的范围内,或者nums[i]
等于nums[nums[i] - 1]
(即已经在正确的位置上),则跳过。- 否则,如果
nums[i]
不在nums[nums[i] - 1]
的位置上,则将nums[nums[i] - 1]
和nums[i]
交换。- 再次遍历数组,找到第一个不满足
nums[i] = i + 1
的位置i
,则i + 1
就是未出现的最小正整数。如果所有元素都满足nums[i]