首页 > 其他分享 >41.缺失的第一个正数

41.缺失的第一个正数

时间:2023-04-05 17:46:51浏览次数:32  
标签:cnt nums int 示例 41 哈希 正数 缺失

缺失的第一个正数

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

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

示例 1:

输入:nums = [1,2,0]
输出:3
示例 2:

输入:nums = [3,4,-1,1]
输出:2
示例 3:

输入:nums = [7,8,9,11,12]
输出:1

提示:

\(1 <= nums.length <= 5 * 10^5\)
\(-2^{31} <= nums[i] <= 2^{31} - 1\)

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/first-missing-positive
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路1:哈希表

使用哈希表记录出现的数字,并从1开始查找缺失了的最小正整数。

code

class Solution {
public:

    int firstMissingPositive(vector<int>& nums) {
        
        unordered_map<int,int> cnt;

        for(auto item : nums) cnt[item] ++;

        int i = 1;
        while(1)
        {
            if(cnt.find(i) == cnt.end()) break;
            i ++;
        }

        return i;

    }
};

解题思路2:原地哈希

见注释。

code

class Solution {
public:
    //原地算法:使用nums的下标做标记
    //i -> i-1的位置,也就是将所有的数摆到该摆的位置
    //遍历一遍看看哪里缺失

    int firstMissingPositive(vector<int>& nums) {
        
        int n = nums.size();

        for(int i = 0;i < n;i ++)
        {
            //因为换过来的可能也是1-n之间的数,也需要摆到合适的位置
            while(nums[i] > 0 && nums[i] <= n && nums[i] != nums[nums[i] -1])
            {
                int tmp = nums[i];
                nums[i] = nums[tmp-1];
                nums[tmp-1] = tmp;
                //nums[i]放到了i-1处
                //现在的nums[i]是交换后的值,也需要摆到正确位置
            }
        }

        for(int i = 0;i < n;i ++)
        {
            if(nums[i] != i + 1) return i + 1;
        }

        return n + 1;

    }
};

标签:cnt,nums,int,示例,41,哈希,正数,缺失
From: https://www.cnblogs.com/huangxk23/p/17289995.html

相关文章

  • 2013年工作中遇到的20个问题:41-60
    41.API的稳定性publicstaticList<Integer>getStatusCode(Stringrole);被多个方法调用。其中一个方法是xxxFunction(){getStatusCode(“role”);现在需要给getStatusCode增加一个参数,aa;参数的值aa从session中取得,aa=ActionContextUtils.getFromSession("aa");现在遇到一个问题,如......
  • COMP3411/9814 人工智能
    COMP3411/9814ArtificialIntelligenceTerm1,2023Assignment3–PlanningandMachineLearningDue:Week10-10pmFriday21AprilMarks:10%offinalassessmentforCOMP3411/9814ArtificialIntelligenceQuestion1:Planning(4marks)Modifythesimpleplanner......
  • 洛谷4113(树状数组+离线处理)
    [HEOI2012]采花题目描述萧薰儿是古国的公主,平时的一大爱好是采花。今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花。花园足够大,容纳了$n$朵花,共有$c$种颜色,用整数$1\simc$表示。且花是排成一排的,以便于公主采花。公主每次采花后会统计采到的花的颜色数,颜色......
  • INS-41881处理
    GI升级时,跑完dryRunForUpgrade后再执行gridSetup.sh时候出现下面异常--/u01/app/19.0.0/19grid/gridSetup.sh-dryRunForUpgrade[INS-41881]InstallerhasdetectedthatthegroupspecifiedforOSDBAisnotsameasthegroup'asmdba'retrievedfromthecurrentconfig......
  • 力扣---剑指 Offer 41. 数据流中的中位数
    如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如,[2,3,4] 的中位数是3[2,3]的中位数是(2+3)/2=2.5设计一个支持以下......
  • Java 缺失的特性:扩展方法
    作者:周密(之叶)什么是扩展方法扩展方法,就是能够向现有类型直接“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改现有类型。调用扩展方法的时候,与调用在类型中实际定义的方法相比没有明显的差异。为什么需要扩展方法考虑要实现这样的功能:从Redis取出包含多个商......
  • Java 缺失的特性:扩展方法
    作者:周密(之叶)什么是扩展方法扩展方法,就是能够向现有类型直接“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改现有类型。调用扩展方法的时候,与调用在类型中实际定义的方法相比没有明显的差异。为什么需要扩展方法考虑要实现这样的功能:从Redis取出包含多个商品ID......
  • nginx上传文件超出默认大小限制-附件,提示:413 Request Entity Too Large
    Nginx限制文件上传大小,相应配置参数:client_max_body_size注意:该参数在nginx.conf中默认是没有配置的,不配置的情况下,nginx默认限制请求附件大小为:1M。即:默认当你通过nginx代理上传附件,大于1M的文件时,浏览器会抛出如下异常。处理方式:找到nginx的配置文件nginx/conf/nginx.conf,......
  • 力扣-441. 排列硬币
    你总共有 n 枚硬币,并计划将它们按阶梯状排列。对于一个由k行组成的阶梯,其第i行必须正好有i枚硬币。阶梯的最后一行可能是不完整的。给你一个数字 n,计算并返回可形成完整阶梯行的总行数。应该首先判断数据源是否是有序的,先二分。varrs=ArrangeCoins(180428938......
  • 41、K8S-网络机制之Flannel
    1、网络基础1.1、Pod接入网络的具体实现1.1.1、虚拟网桥虚拟网桥:brdige,用纯软件的方式实现一个虚拟网络,用一个虚拟网卡接入到我们虚拟网桥上去。这样就能保证每一个容器和每一个pod都能有一个专用的网络接口,从而实现每一主机组件有网络接口。每一对网卡一半留在pod之......