leetcode【41】First Missing Positive

问题描述:

Given an unsorted integer array, find the smallest missing positive integer.

题目意思就是找到最小的缺省的正整数。

解题思路(一):傻瓜解法

这是我自己的一个傻瓜解法:

  • 创建一个大小为nums.size()+1的数组flag;
  • 遍历nums为flag赋值,flag[i]==1表示nums中存在i值;
  • 找到flag中第一个为0的元素i,返回i;
  • 若一直没有返回,则说明,1到nums.size()在nums中都存在,则返回nums.size()+1;

源码(一)

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        if(nums.size()==0)
            return 1;
        // cout<<min_num;
        vector<int> flag(nums.size()+1, 0);
        // int index==1
        for(int i=0; i<nums.size(); i++){
            if(nums[i]>=1 && nums[i]<=nums.size())
                flag[nums[i]] = 1;
        }
        for(int i=1; i<flag.size(); i++){
            if(flag[i] == 0)    return i;
        }
        return nums.size()+1;
    }
};

解题思路(二):

首先把nums中所有在1到nums.size()之间的数字安排到对应的位置,对应关系为i+1==nums[i]

在开始遍历检查,直到找到第一个i+1!==nums[i]

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        for(int i=0; i<nums.size(); i++){
            if(i+1==nums[i]) continue;
            int x = nums[i];
            while(x>=1 && x<=nums.size() && x!=nums[x-1]){
                swap(x, nums[x-1]);
            }
        }
        for(int i=0; i<nums.size(); i++){
            if(i+1!=nums[i])    return i+1;
        }
        return nums.size()+1;
    }
};
发布了73 篇原创文章 · 获赞 11 · 访问量 9491

猜你喜欢

转载自blog.csdn.net/fanyuwgy/article/details/103537213