跳到主要内容

41 缺失的第一个正数

https://leetcode.cn/leetbook/read/top-interview-questions-hard/xwkftg/

cost: 16m13s

class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
for (int i = 0; i < nums.size();) {
int v = nums[i];
if (v == i + 1) {
i++;
continue;
}
if (v < i + 1 && v >= 1) {
if (nums[v - 1] == v) {
nums[i] = -1;
i++;
continue;
}
std::swap(nums[v - 1], nums[i]);
i++;
continue;
}
if (v > i + 1 && v - 1 < nums.size()) {
if (nums[v - 1] == v) {
nums[i] = -1;
i++;
continue;
}
std::swap(nums[v - 1], nums[i]);
continue;
}
nums[i] = -1;
i++;
}
for (int i = 0; i < nums.size(); i++) {
if (nums[i] == -1) {
return i + 1;
}
}
return nums.size() + 1;
}
};