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

41. 缺失的第一个正数

时间:2023-08-02 22:00:50浏览次数:29  
标签:nums int 复杂度 41 哈希 正数 缺失

41. 缺失的第一个正数

方法:原地哈希

解题思路

  • 原地哈希:在原来的数组基础上构建哈希表,不占用额外的空间
  • 在本题中,设数组大小为 \(n\);
    • 若从 \([1, n]\) 都出现了,则返回 \(n + 1\);
    • 若 \([1, n]\) 中有数没有出现,则在 \([1, n]\) 之间;
    • 故答案范围在 \([1, n + 1]\) 之间。
  • 对于数组中 \(nums[i] <= 0\) 的元素为干扰项将其设置为 \(n + 1\) (或者大于 \(n\) 的任何数),说明该元素对答案没有影响;
  • 接着原地构建哈希表,\(x = abs(nums[i])\),若 \(x <= n\),表明该元素出现过,则另 \(nums[x - 1] = -abs(nums[x - 1])\),打上负号标记,说明当前索引的值存在;
  • 然后遍历哈希表,若有第一个 \(nums[i] > 0\),表明正整数 \(i + 1\) 未出现且为最小,否则返回 \(n + 1\)。

代码

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

复杂度分析

时间复杂度:\(O(n)\);
空间复杂度:\(O(1)\)。

标签:nums,int,复杂度,41,哈希,正数,缺失
From: https://www.cnblogs.com/lxycoding/p/17601871.html

相关文章

  • 剑指 Offer 53 - II. 0~n-1中缺失的数字(简单)
    题目:classSolution{public:intmissingNumber(vector<int>&nums){for(inti=0;i<nums.size();i++){//观察题目,就是找出下标不一致的值if(nums[i]!=i){returni;}}returnnums.size()......
  • 提供高达400MHz性能ADBF704WCCPZ411、ADBF705WCBCZ411嵌入式处理器(DSP)
    这些器件是ADSP-BF70xBlackfin数字信号处理器(DSP)产品系列中的一员。新款Blackfin+处理器内核将16位双MAC、32位MAC和16位复杂MAC结合为先进的信号处理引擎。它还将干净且正交的RISC式微处理器指令集的优势和单指令、多数据流(SIMD)多媒体能力结合为一个指令集架构。而且Blac......
  • 软路由3 卓凌工控 j6412
    配置j6412、双内存槽最大32x2=64g、4x2.5G网口、1xm2、1xsata价格202304、x宝、750、准系统有sata一体线、外置8寸风扇稳定性听说n5xx跑虚拟机有bug,又n100这代只能单个卡槽装32g,所以入j6412,内存也不太挑,鱼竿厂光威、玖合都可以。但是基本吃灰状态没怎么用,而且j64......
  • 国标GB28181视频平台LntonGBS(源码版)国标平台出现报错“缺失dll文件”的问题解决方案
    LntonGBS是基于国标GB28181协议的视频云服务平台,它可以支持国标协议的设备接入,在视频能力上能实现直播、录像存储、检索与回放、云台控制、告警上报、语音对讲、平台级联等功能,既能作为业务平台使用,也能作为能力层平台调用。技术人员在用户服务器部署LntonGBS平台,提示缺失某个dll文......
  • Gym104128L Proposition Composition
    很好口胡却不好写。把边分成链边和额外边首先想到分类讨论,显然不能只删额外边,所以有两类情况,删一链边和两链边。如果删一链边,这一链边要么完全没被额外边覆盖,然后其他任选一条;要么被覆盖一次,额外边选覆盖它的边。用线段树简单维护即可。现在难的是删两链边,且这两条链边都至少......
  • 力扣---141. 环形链表
    给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从0开始)。注意:pos 不作为参数进行传递 。仅仅是为了标......
  • docker-部署Jenkins-2.410
    Jenkins构建及安装https://doc.czy21.com:8443/docker/jenkins/jenkins-ssh-agent构建及安装,提升ci效率https://doc.czy21.com:8443/docker/jenkins-ssh-agent/......
  • 2012 不同年龄段员工 <=40岁 41-50岁 >50岁 2012年考察不同年龄段职场人
    Asisclearlyreflectedinthetableabove,itcanbeseenthatthestatisticsaboutemployees'jobsatisfactionindifferentage.Comparedwithothers,thoseovertheageof50havethelargestpercentageofsatisfaction,whichis40%.Itisnoticeabl......
  • 41. 缺失的第一个正数(原地哈希)
    给你一个未排序的整数数组nums,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为O(n)并且只使用常数级别额外空间的解决方案。示例1:输入:nums=[1,2,0]输出:3>思路原地哈希就相当于,让每个数字n都回到下标为n-1的家里。而那些没有回到家里的就成了孤魂野鬼......
  • FMC子卡设计资料:FMC141-四路 250Msps 16bits AD FMC子卡
    FMC141-四路250Msps16bitsADFMC子卡一、产品概述:   本板卡基于 FMC 标准板卡,实现 4 路 16-bit/250Msps ADC 功能。遵循 VITA 57 标准,板卡可以直接与xilinx公司或者本公司 FPGA 载板连接使用。板卡 ADC 器件采用 ADI 公司 AD9467 芯片,用户可以通过 FMC ......