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

简介: 这篇文章介绍了解决LeetCode第41题“缺失的第一个正数”的两种方法:使用哈希表和调整数组元素位置,以实现时间复杂度为O(n)且只使用常数级别额外空间的解决方案。

题目描述:

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

请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

  • 示例 1: 输入:nums = [1,2,0] 输出:3
  • 示例 2: 输入:nums = [3,4,-1,1] 输出:2
  • 示例 3: 输入:nums = [7,8,9,11,12] 输出:1

方法一(使用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;
    }
};

相关文章
|
6月前
|
存储 算法 数据挖掘
LeetCode题目41:缺失的第一个正数
LeetCode题目41:缺失的第一个正数
|
7月前
leetcode-41:缺失的第一个正数
leetcode-41:缺失的第一个正数
36 0
|
算法 安全 Swift
LeetCode - #41 缺失的第一个正数
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
|
算法
leetcode:41.缺失的第一个正数
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。
53 0
|
存储 测试技术
leetcode:8.字符串转换正数(atoi)
当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
48 0
|
人工智能 图计算
LeetCode--缺失的第一个正数(41)和 接雨水(42)
LeetCode--缺失的第一个正数(41)和 接雨水(42)
68 0
|
算法 索引
Leetcode 40组合总数(回溯)Ⅱ&41缺失的第一个正数&42接雨水
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
100 0
Leetcode 40组合总数(回溯)Ⅱ&41缺失的第一个正数&42接雨水
|
算法
Leetcode_Python 41 缺失的第一个正数
分析:文章指出所用的算法负载度
60 0
Leetcode_Python 41 缺失的第一个正数
LeetCode 面试题57 - II. 和为s的连续正数序列 LCOF
LeetCode 面试题57 - II. 和为s的连续正数序列 LCOF