码迷,mamicode.com
首页 > 其他好文 > 详细

41. 缺失的第一个正数

时间:2020-05-02 12:14:32      阅读:52      评论:0      收藏:0      [点我收藏+]

标签:lag   答案   遍历数组   数组   title   最小   abs   pos   pre   

41. 缺失的第一个正数

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

好歹是道困难题,但是实际上解法非常巧妙,而且很好理解。

我们已知的最小正数是1,那我们先遍历数组看看有没有1,没有的话直接返回1;

如果数组中有1,那我们就不防把非正数和大于n的数置为1,因为这些数都是不可能成为答案的;

最后我们从头遍历数组,遇到|nums[i] | 就令下标为|nums[i] |的数为负,其中下标0用来保存n是否出现;

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int n=nums.size();
        bool flag=false;
        for(int i=0;i<n;i++){
            if(nums[i]==1){flag=true;}
            else if(nums[i]<=0)nums[i]=1;
            else if(nums[i]>n)nums[i]=1;
        }
        if(!flag)return 1;
        for(int i=0;i<n;i++){
            int k=abs(nums[i]);
            if(k==n){
                if(nums[0]>0)
                    nums[0]*=-1;
                continue;
            }
            if(nums[k]>0)nums[k]*=-1;
        }
        for(int i=1;i<n;i++){
            if(nums[i]>0){
                return i;
            }
        }
        if(nums[0]>0)return n;
        return n+1;
    }
};

 

41. 缺失的第一个正数

标签:lag   答案   遍历数组   数组   title   最小   abs   pos   pre   

原文地址:https://www.cnblogs.com/Dancing-Fairy/p/12817339.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!