缺失的第一个正数


思路分析 :
最后的答案一定是介于 1~n+1 之间,那么就可以将不在这个范围的数都变为 n+1,对于每个位置的数,不断的交换到它应该所在的位置
参考代码:
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int n = nums.size();
for(auto &num : nums){
if (num <= 0) num = n+1;
if (num > n) num = n+1;
}
nums.push_back(n+1);
for(int i = 0; i < n; i++){
while(nums[i] != i+1) {
if (nums[i] == nums[nums[i]-1]) break;
swap(nums[i], nums[nums[i]-1]);
}
}
int ans = n + 1;
for(int i = 0; i < n; i++){
if (nums[i] != i+1) {
ans = i + 1;
break;
}
}
return ans;
}
};
东北日出西边雨 道是无情却有情

浙公网安备 33010602011771号