缺失的第一个正数

 

 

 

 思路分析 :

最后的答案一定是介于 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;
    }
};

  

posted @ 2021-11-07 22:09  楼主好菜啊  阅读(28)  评论(0编辑  收藏  举报