首页 > 其他分享 >41. 缺失的第一个正数(原地哈希)

41. 缺失的第一个正数(原地哈希)

时间:2023-07-28 13:45:26浏览次数:36  
标签:数字 idx nums int 41 哈希 正数 size

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

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

示例 1:

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

> 思路

原地哈希就相当于,让每个数字n都回到下标为n-1的家里。

而那些没有回到家里的就成了孤魂野鬼流浪在外,他们要么是根本就没有自己的家(数字小于等于0或者大于nums.size()),要么是自己的家被别人占领了(出现了重复)。

这些流浪汉被临时安置在下标为i的空房子里,之所以有空房子是因为房子i的主人i+1失踪了(数字i+1缺失)。

因此通过原地构建哈希让各个数字回家,我们就可以找到原始数组中重复的数字还有消失的数字。

> 代码


class Solution {
public:
    int firstMissingPositive(vector<int> &nums) {
        for (int i = 0; i < nums.size(); i++) {
            while (nums[i] != i + 1) {
                if (nums[i] <= 0 || nums[i] > nums.size() || nums[i] == nums[nums[i] - 1])
                    break;
                // 将nums[i] 放置到对应位置上[1,2,3...]
                int idx = nums[i] - 1;
                nums[i] = nums[idx];
                nums[idx] = idx + 1;
            }
        }
        for (int i = 0; i < nums.size(); i++) {
            if (nums[i] != (i + 1)) {
                return (i + 1);
            }
        }
        return (nums.size() + 1);
    }
};

标签:数字,idx,nums,int,41,哈希,正数,size
From: https://www.cnblogs.com/lihaoxiang/p/17587356.html

相关文章

  • FMC子卡设计资料:FMC141-四路 250Msps 16bits AD FMC子卡
    FMC141-四路250Msps16bitsADFMC子卡一、产品概述:   本板卡基于 FMC 标准板卡,实现 4 路 16-bit/250Msps ADC 功能。遵循 VITA 57 标准,板卡可以直接与xilinx公司或者本公司 FPGA 载板连接使用。板卡 ADC 器件采用 ADI 公司 AD9467 芯片,用户可以通过 FMC ......
  • HDU4841 AHOI1999 圆桌问题 题解
    朴素的约瑟夫问题,用vector处理即可#include<iostream>#include<vector>usingnamespacestd;//AHOI1999圆桌问题类似于约瑟夫问题vector<int>table;intn,m;intmain(){while(cin>>n>>m){table.clear();for(inti=0;......
  • 416. 分割等和子集
    416.分割等和子集 给你一个只包含正整数的非空数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例1:输入:nums=[1,5,11,5]输出:true解释:数组可以分割成[1,5,5]和[11]。示例2:输入:nums=[1,2,3,5]输出:false解......
  • Template <字符串哈希>
    #include<iostream>#include<string>#include<vector>usingnamespacestd;usingULL=unsignedlonglong;//字符串哈希(注意get(l,r)为闭区间,字符串下标从1开始)structStringHash{vector<ULL>h;//哈希数组vector<ULL>p;//p[i]=P......
  • 在Java和C#中计算SHA-1哈希
    Java版本:publicvoidtestHash(){Stringpassword="Test";byte[]key=password.getBytes();MessageDigestmd=MessageDigest.getInstance("SHA-1");byte[]hash=md.digest(key);Stringresult="";for(byteb:hash){res......
  • 提示:进程已结束,退出代码-1073741819 (0xC0000005)
    问题描述:idea运行程序闪退,显示——进程已结束,退出代码-1073741819(0xC0000005)问题原因:Idea和金山词霸的划词功能不能同时打开。(发现这个原因的时候,挺无语的,说实话) Idea和金山词霸的划词功能不能同时打开......
  • ArcEngine开发弹出-41,147的授权提示
    明明ArcGISDesktop已授权,且许可管理服务正常运行,但ArcEngine应用程序开发时,时而弹出如下提示。解决方案:(1)采用代码授权的方式;(2)如果已经使用过许可控件,请删除它,在资源里清除OcxState清除后,重新设置相关控件属性。......
  • 【题解】Educational Codeforces Round 150(CF1841)
    赛时过了A-E,然后就开摆了,为什么感觉C那么无厘头[发怒][发怒]排名:25thA.GamewithBoard题目描述:Alice和Bob玩游戏,他们有一块黑板。最初,有\(n\)个整数\(1\)。Alice和Bob轮流操作,Alice先手。轮到时,玩家必须在棋盘上选择几个(至少两个)相等的整数,擦除它们,然后写一个......
  • oracle数据库临时表空间损坏,报错ORA-01116,ORA-01110 ,ORA-27041,ORA-06512的解决方式
     打脚本的时候报错:ORA-01116:打开数据库文件203时出错ORA-01110:数据文件203:'/u01/app/oracle/oradata/temp02.dbf'ORA-27041:无法打开文件Linux-x86_64Error:2:NosuchfileordirectoryAdditionalinformation:3ORA-06512:在line9  是我们环境的临时表空间......
  • 【原创】在 VBScript 中使用哈希表(Hashtable)
    环境要求WindowsXP及以上。Windows10、Windows11在Windows功能中勾选.NETFramework3.5(包括.NET2.0和3.0)。使用创建一个Hashtable对象:SetoHT=CreateObject("System.Collections.Hashtable")Count属性:返回表中键值对的数量SetoHT=CreateObj......