leetcode 41 缺失的第一个正数

缺失的第一个正数

leetcode 41 缺失的第一个正数_第1张图片

高频题(set法)

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        set<int> my_set;
        for(int i=0 ; i<nums.size() ;i++)
        {
            if(nums[i] > 0)  my_set.insert(nums[i]);
        }

        auto it = my_set.begin();
        if( *it != 1) return 1;
        else 
        {
            int pre = *it;
            it++;
            while( it != my_set.end() )
            {
                if(*it - pre > 1) return pre + 1;
                pre = *it;
                it++;
            }
        }
        return *it+1;
    }
};

高频题(哈希法)

leetcode 41 缺失的第一个正数_第2张图片

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int N = nums.size();
        for(int i=0 ; i<nums.size() ;i++)
            if(nums[i] <= 0) nums[i] = N + 1;
        
        for(int i=0 ; i<nums.size() ;i++)
        {
            int tmp = abs(nums[i]);
            if(tmp <= N) nums[ tmp -1 ] = - abs(nums[ tmp -1 ]);
        }
       
        for(int i=0 ; i<nums.size() ;i++)
            if(nums[i] > 0) return i+1;
        
        return N+1;
    }
};

你可能感兴趣的:(算法刷题,高频题,leetcode,算法,数据结构)