41. 缺失的第一个正数

给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。

 

示例 1:

输入: [1,2,0]
输出: 3
示例 2:

输入: [3,4,-1,1]
输出: 2
示例 3:

输入: [7,8,9,11,12]
输出: 1

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int siz = nums.size();
        if(!siz)return 1;
        int ans = INT_MAX;
        for(int i=0;i<siz;++i){
            if(nums[i]>0)ans=min(ans,nums[i]);
        }
        if(ans>1)return 1;
        for(int i=0;i<siz;++i){
            if(nums[i]<=0){
                nums[i] = ans;
            }
        }
        int num = 0;
        for(int i=0;i<siz;++i){
                if(nums[i]==0)continue;
                if(abs(nums[i])>siz)continue;
                else {
                    if(nums[abs(nums[i])-1]>0)nums[abs(nums[i])-1] = -nums[abs(nums[i])-1],++num;
                }
        }
        if(num == siz)return siz+1;
        for(int i=0;i<siz;++i){
            if(nums[i]>=0){
                return i+1;
            }
        }
        return siz;
    }
};

  

posted @ 2020-07-02 16:02  Xzavieru  阅读(109)  评论(0编辑  收藏  举报