缺失的第一个正数
思路分析 :
最后的答案一定是介于 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; } };
东北日出西边雨 道是无情却有情