0
点赞
收藏
分享

微信扫一扫

Leetcode第41题(缺失的第一个正数)

工程与房产肖律师 2022-04-07 阅读 66

题目描述:

方法一(使用hash表解决):

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        //使用hash解决
        unordered_map<int,int> order;

        //将hash表中对应位置元素置1
        for(int i = 0;i < nums.size();i++)
            order[nums[i]]++;
        
        //遍历hash表,找到第一个值不为1的下标i直接返回即可
        //从1开始遍历是为了去除nums数组中有值为0的情况
        for(int i = 1;i <= nums.size();i++){
            if(!order[i])
            return i;
        }
        //遍历结束没有找到值为0的元素直接返回数组大小加一
        return nums.size() + 1;
    }
};

方式二(调整数组元素位置):

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int n = nums.size();

        //将数组元素调整到正确的位置
        for(int i = 0;i < n;i++){
            while(nums[i] >= 1 && nums[i] < n && nums[i] != nums[nums[i] - 1])
                swap(nums[i],nums[nums[i] - 1]);
        }
        
        //遍历数组,找到数组 下标+1 与存储的元素不对应的直接返回
        for(int i = 0;i < n;i++)
            if(nums[i] != i + 1) return i + 1;
        
        //遍历完成,均符合,最小正数为数组长度加一
        return n + 1;
    }
};

举报

相关推荐

0 条评论