缺失的第一个正整数——原地哈希

倍加福(P+F)R2000修改雷达IP 在调试车子的时候,用到了倍加福R2000的一款雷达,设备启动建图时发现建不了图,于是查看/scan发现话题无数据,尝试ping雷达接口发现ping不通,应该是IP地址与上位机端口的IP地址不对。首先查看雷达的IP地址,这个在雷达上有两个按键,按下后可以显示IP: 按两下右边的键再按一下左边的键雷达上会显示出IP号,这里拍的不是很清楚。查看到开始时雷达IP地址为192.168.111.10,而上位机ping的IP地址为192.168.188.50.与实际不同,所以需要对雷达进行配置。一台windows笔记本 阅读详情

题目说明

这个是牛客101题中的第53题,题目描述是给一个无重复元素的数组,找出没有出现的最小的正整数

缺失的第一个正整数_牛客题霸_牛客网 

乍一看似乎不太难,但是要做到时间复杂度O(n)也是要花点心思的

思路详解

假设这有一个数组

题目要求的时间复杂度是O(n),空间复杂度O(1),就说明了只能在数组上原地操作了

首先,题目要求的是正整数,就排除了负数和0,已知最小的正整数是1,那么我们就可以在刚开始定义一个布尔类型的值,用来判断数组中是否出现1,如果并没有出现那就直接返回1

然后小于0或者大于数组长度的数也根本不符合要求,这时可以再遍历一遍数组,将这些数做特殊处理都赋值为1;

接着,就到了这个思路核心的地方了,原地哈希

因为正整数是从1开始的,而下标是从0开始的,所以当当前循环的下标大于0时,取出当前下标对应的数 X ,将数组中 X-1 位置对应的数  取绝对值再取反(这里就是防止前面取反过了然后再取反变成正数)而且因为刚开始已经把负数处理了,所以当赋值相反数时都会将整数变为负数

最后,再遍历一遍数组,找到的第一个正数所对应的下标加1就是数组中缺失的最小正整数

    int minNumberDisappeared(vector<int>& nums) {
        int n=nums.size();
        //首先定义布尔变量,然后遍历数组,判断数组中是否存在1
        bool flag = false;
        for (int num : nums) {
            if (num == 1) flag = true;
        }
        if (!flag) return 1;
        //接着排除掉不可能是题目要求的值
        //注意这里的引用
        for (int& num : nums) {
            if (num < 0 || num > n) num = 1;
        }
        //然后到核心部分,原地哈希,找出真正缺失的最小正整数
       for (int i = 0; i < n; i++) {
            int num = abs(nums[i]);
            nums[num - 1] = -abs(nums[num - 1]);
        }
        //最后一个for找出目标值
        for (int i = 0; i < n; i++) {
            if (nums[i] > 0) return i + 1;
        }
        return n+1;
    }

医学图像分割评价指标详解:从Dice到MSD的实战解析 本文深入解析医学图像分割的核心评价指标,从最常用的Dice相似系数到衡量边界精度的MSD(最大对称表面距离),通过实战案例与代码演示,系统阐述各指标的计算原理、应用场景及临床意义,帮助读者全面评估模型性能。 阅读详情

相关推荐

(OSTrack)Joint Feature Learning and Relation Modeling for Tracking A One-Stream Framework

Joint Feature Learning and Relation Modeling for Tracking A One-Stream Framework (OSTrack)

小火山的博客 1653

LeetCode 41题实战:用‘原地哈希’在O(n)内找出缺失的最小正整数(附C++/Python代码)

本文详细解析了LeetCode第41题'缺失的第一个正数',重点介绍了原地哈希算法在O(n)时间内且不使用额外空间的解决方案。通过C++和Python代码实现,深入探讨了算法原理、边界处理及复杂度分析,帮助开发者掌握这一高效算法技巧,适用于技术面试和实际编程挑战。

weixin_30781433的博客 482

【OpenClaw企业级智能体实战】第32篇:政企版OpenClaw安全落地指南——奇安信55页报告深度拆解与实战

2026年Q2,OpenClaw(俗称“龙虾”)安全风险集中爆发,公安部、工信部等监管机构密集发声,23万公网暴露实例、155个高危漏洞让企业“养虾”安全压力骤增。奇安信发布的55页《政企版龙虾安全使用指南》,以“看得清、管得住、用得好”为核心,构建了“端-网-云”三层防护体系。本文深度拆解这份报告的九大安全面与三大趋势,全景扫描奇安信、腾讯、360等头部厂商安全方案,提炼企业最低安全基线与实操配置,通过金融机构虚拟案例演示落地全流程,提供从资产摸底、规范制定到工具部署的完整解决方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 572

BM53 缺失的第一个正整数,哈希表,原地哈希(扩展思路)

本文讨论了如何找出未排序整数数组中缺失的最小正整数。提供了两种方法: 哈希表法:利用哈希表记录出现的数字,从1开始查找第一个未出现的正整数。时间复杂度O(n),空间复杂度O(n)。 原地哈希法:通过修改数组本身标记出现的数字,未被标记的位置即为缺失值。时间复杂度O(n),空间复杂度O(1)。 两种方法均能高效解决问题,其中原地哈希法在空间复杂度上更优。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1014

【图像拼接】源码精读:Parallax-Tolerant Unsupervised Deep Image Stitching(UDIS++)

注:Pytorch代码。【图像拼接论文精读】专栏对应文章【图像拼接】论文精读:Parallax-Tolerant Unsupervised Deep Image Stitching(UDIS++)配合对应的文章阅读,效果更佳!注:请重点关注代码段中的注释!!!有一些讲解的东西直接写在代码段的注释中了,同时多关注红色字体和绿色字体!!!我认为深度学习方法和传统方法有很多相似之处。比如:深度学习中的损失函数和传统方法中的对齐项、失真项等其实原理相同,只是求解方式不同。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 7272

“软开关”硬技术!ZVS和ZCS到底谁更牛?看完这个例子你就懂了!

❌ ZVS 和 ZCS 是万能的?→ 不,它们都有实现条件,谐振参数选不好照样硬拐弯!❌ 只要有谐振就一定ZVS?→ 不,一定要设计合适的死区时间和负载条件才行!ZVS 是让电压先“冷静”,ZCS 是让电流先“退场”。一个是开门不撞墙,一个是关门不甩门。懂了它们,功率设计就是在跳华尔兹而不是打架!💃🔌。

weixin_43199439的博客 1236

LeetCode算法学习-缺失的第一个正数(解题思路过程)

给你一个未排序的整数数组nums,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为O(n)并且只使用常数级别额外空间的解决方案。

qq_40805720的博客 1436

【华为OD技术面试真题 - 技术面】- python面试题(1)

华为OD面试技术面准备指南 华为OD面试技术面常见问题解答 华为OD面试技术面经验分享 华为OD面试技术面注意事项 华为OD面试技术面攻略 华为OD面试技术面模拟题目与解析 华为OD面试技术面知识点梳理 华为OD面试技术面常考

算法大师! 5532

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

原地hash,因为差的最小的正数最大就是n + 1,可以将对应位置的值交换到对应hash的idx上,注意idx是从0开始,正数是从1开始的。 最后遍历hash,如果对应位置上的值不为对应的idx,那么说明确实这个正数,返回即可。

Cosmoshhhyyy的博客 490

【系统分析师】2009年真题:综合知识-答案及详解

在某银行业务的用例模型中,“取款”用例需要等到“存款”用例执行之后才能执行,两个用例之间的关系属于(1);“取款”和“存款”两个用例中都需 要执行查询余额的功能,将查询余额提取成独立的用例,那么“取款”和“存款” 用例与“查询余额”用例之间的关系属于(2)。(1)A. 关联关系 B. 扩展关系 C. 使用关系 D. 依赖关系 (2)A. 扩展关系 B. 使用关系 C. 依赖关系 D. 继承关系【参考答案】D、A雇员类含有计算报酬的行为,利用面向对象的(3),可以使得其派生类专职 雇员类和兼职雇员类计算报酬的

数据知道的博客 1万+

【学习系列】SAP RAP 29:如何创建Application Jobs(下)

本文介绍了在SAP系统中通过API创建和使用Application Jobs的方法。主要内容包括:1) 创建RAP应用并通过Action调用API创建Jobs;2) 使用事件驱动方式异步更新Job状态;3) 通过URL跳转到标准日志页面;4) 使用Custom Entity获取Job日志;5) 演示遗留接口IF_APJ_DT_EXEC_OBJECT和IF_APJ_RT_EXEC_OBJECT的使用。文章提供了详细的代码示例,展示了如何通过CL_APJ_RT_API=>SCHEDULE_JOB调度作业,

DeveloperMrMeng的博客 375

【Problem:41. 缺失的第一个正数】从哈希表到原地哈希优化

题目要求找出未排序整数数组中缺失的最小正整数,要求时间复杂度为O(n)且空间复杂度为O(1)。 解法一使用哈希表存储所有数字,然后从1开始遍历查找缺失的最小正整数。虽然时间复杂度为O(n),但空间复杂度为O(n),不符合要求。 解法二采用原地哈希,通过交换将数字i放置到下标i-1的位置。遍历数组后,再次检查第一个不符合nums[i]=i+1的位置即为答案。若全部符合,则返回n+1。该方法满足时间O(n)和空间O(1)的要求。 示例: [1,2,0] → 3 [3,4,-1,1] → 2 [7,8,9,11,

通过输出内容提升自己 1062

操作系统实验四 进程运行轨迹的跟踪与统计(哈工大李治军)

实验4 进程运行轨迹的跟踪与统计 实验目的 掌握 Linux 下的多进程编程技术; 通过对进程运行轨迹的跟踪来形象化进程的概念; 在进程运行轨迹跟踪的基础上进行相应的数据统计,从而能对进程调度算法进行实际的量化评价,更进一步加深对调度和调度算法的理解,获得能在实际操作系统上对调度算法进行实验数据对比的直接经验。 实验内容 进程从创建(Linux 下调用 fork())到结束的整个过程就是进程的生命期,进程在其生命期中的运行轨迹实际上就表现为进程状态的多次切换,如进程创建以后会成为就绪态;当该进程被调度以

leoabcd12的博客 4652

《缺失的第一个正数:原地哈希算法的理论与实践》

缺失的第一个正数问题是数组处理领域的经典算法问题,要求在未排序整数数组中找出未出现的最小正整数,同时需满足时间复杂度 O(n) 与常数级额外空间的约束。本文以 ** 原地哈希(置换法)** 为核心,系统分析其算法原理、正确性证明、复杂度特性,并对比其他方法的局限性,同时探讨工程实现中的边界处理与优化策略。实验结果表明,原地哈希法在时间效率、空间开销与代码简洁性上达到了最优平衡,适用于大规模数组场景。给定未排序整数数组 nums(元素取值范围为 [−231,231−1]),目标是找到其中未出现的最小正整数。

haaazy_的博客 890

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【数据结构-哈希表 一】【原地哈希】:缺失的第一个正整数

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【原地哈希】,使用【数组】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为:目标公司+最近一年+出现频率排序,由高到低的去牛客TOP101去找,只有两个地方都出现过才做这道题(CodeTop本身汇聚了LeetCode的来源),确保刷的题都是高频要面试考的题。明确目标题后,附上题目链接,后期可以依据解题思路反复快速练习,题目按照题干的基本数据结构分类,且每个分类的第一篇必定是对基础数据结构的介绍。又是一

MaoLin Tian's Blog 1088

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

力扣 Hot 100 刷题记录 - 缺失的第一个正数

困难:给定一个未排序的整数数组nums,请你找出其中没有出现的最小正整数。要求算法的时间复杂度为,并且只能使用常数级别的额外空间。

weixin_50893711的博客 451

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

41.寻找缺失的第一个正数:原地哈希算法详解

原地哈希算法通过索引映射和元素交换,将时间复杂度优化至O(n),空间复杂度优化至O(1)。该方法不仅高效,还能帮助深入理解数组索引与数值之间的关系。掌握这一算法,可轻松应对类似的高频面试题。

weixin_44435110的博客 685

数组中缺失的第一个正整数——原地哈希

原地哈希法求数组中缺失的最小正整数

weixin_70385060的博客 204

【Hot 100 刷题计划】 LeetCode 41. 缺失的第一个正数 | C++ 原地哈希题解

本文介绍了LeetCode 41题 缺失的第一个正数 的两种解法。第一种使用哈希表记录出现过的正整数,然后从1开始查找缺失的最小正数,空间复杂度O(N)。第二种采用原地哈希算法,通过交换将数字归位到对应索引,利用原数组作为哈希表,空间复杂度O(1)。两种方法的时间复杂度均为O(N),其中原地哈希解法更符合面试要求,是空间最优解。关键思路是将数字i放置到索引i-1的位置,然后遍历检查第一个不匹配的位置即为缺失的最小正数。

qq_51233453的博客 464

普通数组-41. 缺失的第一个正数

摘要: 题目要求在O(n)时间、O(1)空间内找到数组缺失的最小正整数。核心思路是通过原地哈希,将数字k交换到下标k-1的位置,使数组下标与值匹配。步骤如下: 原地交换:遍历数组,将1~n范围内的数字放到对应位置(避免死循环需判断nums[i] != nums[nums[i]-1])。 校验结果:再次遍历,首个不满足nums[i]=i+1的位置即为缺失数;若全匹配则返回n+1。 关键点:交换时需用临时变量保存值,防止覆盖;循环条件需处理重复数字。代码通过双循环实现,高效且节省空间。 示例输入: 3 3 4

weixin_45784564的博客 339

拷打字节面试官之-吃透c语言-哈希算法 如何在3面拷打字节cto 3万行算法源码带你吃透算法面试所有考题

本文深入解析了牛客面试101热题中的哈希算法相关题目,从基础到进阶提供了多种解法。首先介绍了摩尔投票法在"出现次数超过一半的数字"问题中的巧妙应用,将空间复杂度降至O(1)。其次探讨了异或运算在"出现一次的两个数字"问题中的高效解法。针对"缺失的第一个正整数",详细讲解了原地哈希技巧,利用数组本身实现O(1)空间复杂度。最后解析了"三数之和"问题中排序+双指针的优化思路,将时间复杂度从O(n³)降至O(n²)。文章强调算法思维比

c5dnuser的博客 761

校招算法笔面试 | 缺失的第一个正整数

牛客题库题解

wc529065的博客 965

LeetCode 41. 缺失的第一个正数

41. 缺失的第一个正数 原地Hash class Solution { public: int firstMissingPositive(vector<int>& nums) { int n = nums.size(); for(int i = 0; i < n; i ++) { //原地hash,就是将nums[i] 放到(nums[i] - 1)位置上

qq_45925322的博客 344

原地哈希:寻找缺失的第一个正数

该算法用于寻找数组中缺失的最小正整数。核心思路是通过原地哈希将数值映射到对应下标位置(数值-1)。首先遍历数组,将每个有效正整数(1~n)交换到正确位置;然后再次遍历,首个数值不等于下标+1的位置即为缺失数。若全部匹配,则返回n+1。该方法时间复杂度O(n),空间复杂度O(1)。

m0_74779497的博客 187

原地哈希算法:高效解决缺失的第一个正数问题

数组处理是算法中的基础操作,而原地哈希技术提供了一种空间高效的解决方案。通过将数组索引作为哈希键,该算法能在O(n)时间复杂度和O(1)空间复杂度内解决问题。这种技术特别适用于内存受限的场景,如嵌入式系统或大数据处理。在实际应用中,从数据库ID分配到日志分析,原地哈希都展现出其独特优势。相比传统的哈希表法和排序法,它不仅节省内存,还能更好地处理边界条件。掌握这种算法思想,对解决LeetCode 41等类似问题大有裨益。

weixin_34152820的博客 421

【每日一题】【原地哈希】2022年1月2日-41. 缺失的第一个正数

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 思路:原地哈希 class Solution { public int firstMissingPositive(int[] nums) { int len = nums.length; for(int ...

USTSD的博客 94
上一篇: 数组中出现超过一半的数字——摩尔投票算法
下一篇: 全排列大杂烩——回溯算法
宴之敖者、
博客等级 码龄4年 131粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值