【题干】
给你一个未排序的整数数组?nums
?,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为?O(n)
?并且只使用常数级别额外空间的解决方案。
【思路】
O(n)
?。【题解】
class Solution {
public:
int firstMissingPositive(vector<int> &nums) {
for (int i = 0; i < nums.size(); i++) {
while (nums[i] != i + 1) {
if (nums[i] <= 0 || nums[i] > nums.size() || nums[i] == nums[nums[i] - 1])
break;
int idx = nums[i] - 1;
nums[i] = nums[idx];
nums[idx] = idx + 1;
}
}
for (int i = 0; i < nums.size(); i++) {
if (nums[i] != (i + 1)) {
return (i + 1);
}
}
return (nums.size() + 1);
}
};