题意:
求给出的一串数字中的最小的缺失的连续正整数。要求时间复杂度O(n),空间复杂度O(1)。
思路:
虽然不能排序,但是连续正整数这个性质比较特殊,举例来说:假设扫描数字串的时候遇到一个3,那就把它放在第3个位置。那么当把所有的数字都放好之后,从前到后扫描数字串,最先断开的地方就是答案。
代码:
class Solution {
public:
int firstMissingPositive(vector<int> &nums) {
int ans = 0;
for (int i = 0; i < nums.size(); ++i) {
if (nums[i] != i + 1) {
while (nums[i] - 1 != i && nums[i] >= 1 && nums[i] <= nums.size() && nums[nums[i] - 1] != nums[i]) {
swap(nums[i], nums[nums[i] - 1]);
}
}
while (ans < nums.size() && nums[ans] == ans + 1) {
++ans;
}
}
return ans + 1;
}
};