41. First Missing Positive

来源:互联网 发布:sql安装提示之前挂起 编辑:程序博客网 时间:2024/05/20 20:21

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

For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.

Your algorithm should run in O(n) time and uses constant space.

给定一个无序的整型数组,找到数组中第一个未出现的正整数。
要求算法的时间复杂度为O(n),空间复杂度为O(1)。

如果没有要求空间复杂度的话,这道题只需要利用unorder_map并遍历两次即可获得结果。

#include <unordered_map>#include "FirstMissingPositive.h"int FirstMissingPositive::firstMissingPositive1(vector<int>& nums){    unordered_map<int, bool> map;    for (int i = 0; i < nums.size(); i++)    {        map[nums[i]] = true;    }    int k = 1;    for (; k <= nums.size(); k++)    {        if (map.find(k) == map.end())            return k;    }    return k;}int FirstMissingPositive::firstMissingPositive2(vector<int>& nums){    for (int i = 0; i < nums.size(); i++)    {        //這裡要達到的效果是 nums[i] != nums[nums[i] - 1],即每個位置上的值為其序列值(如果有的話)        //前兩個判斷是為了只處理正整數        while (nums[i] > 0 && nums[i] <= nums.size() && nums[i] != nums[nums[i] - 1])        {            swap(nums[i], nums[nums[i] - 1]);        }    }    for (int i = 0; i < nums.size(); i++)    {        if (nums[i] != i + 1)            return i + 1;    }    return nums.size() + 1;}
原创粉丝点击