Leetcode First Missing Positive

来源:互联网 发布:监控电脑屏幕的软件 编辑:程序博客网 时间:2024/05/17 08:23

题意:找到第一个丢失的正数。

思路:使用hash实现O(1)的查找。

class Solution {public:    int firstMissingPositive(vector<int>& nums) {        map<int, bool> myhash;        for(int i = 0; i < nums.size(); ++ i) {            if(nums[i] > 0) {                myhash[nums[i]] = true;            }        }        int i = 1;        while(true) {            if(myhash[i] == false) return i;            i ++;        }    }};

另一种思路仿照之前找重复的元素的方法,将元素放在其值和下标相对应的位置上,最后遍历整个数组,如果下标和值不能对应,则该值为缺失的值。

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


0 0