当前位置: 首页 > news >正文

【双指针】缺失的第一个正整数

在这里插入图片描述
改一下输入输出格式,第一行输入n,接下来输入n个整数,输出缺失的第一个正整数。这道题需要分情况讨论,用左程云老师的例子来举例,现在n=10,10个整数依次为-3,2,1,8,5,4,2,3,5,13,假设它们存储在数组a中,下标从1开始。我们定义两个变量l和r,l表示前l个(包括l)是已经顺好的(即下标1存放1,下标2存放2,下标3存放3,依此类推),从第r个位置开始存储不符合要求的整数,不符合要求的整数满足一下其中一个条件:
1)a[l]<l;(比如例子中的-3) 2) a[l]>r; (比如例子中的13)
3)a[a[l]]==a[l] (有重复的数)。
整体算法的流程是:初始化l=1,r=n+1,一开始假设全部都是顺好的。接着按以下情况去判断和操作:

情况操作说明
a[l]==ll=l+1当前的顺好了,就继续看下一个是否顺好
a[l]<lr=r-1, swap(a[l],a[r])把不符合要求的移到r右边,缩小符合要求的范围
a[l]>rr=r-1, swap(a[l],a[r])把不符合要求的移到r右边,缩小符合要求的范围
a[a[l]]==a[l]r=r-1, swap(a[l],a[r])把不符合要求的移到r右边,缩小符合要求的范围
除了以上四种情况的其他情况swap(a[l],a[a[l]])把当前元素交换到它应该在的位置

代码实现:

#include<bits/stdc++.h>
using namespace std;
int n,l,r,a[100005];
int main(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];l=1; r=n+1;while(l<=r){if(a[l]==l) l++;else if(a[l]>r||a[l]<l||a[a[l]]==a[l]){r--;swap(a[l],a[r]);} else swap(a[l],a[a[l]]); }cout<<r+1<<endl;
http://www.xdnf.cn/news/500581.html

相关文章:

  • Visual Studio2022跨平台Avalonia开发搭建
  • 混合学习:Bagging与Boosting的深度解析与实践指南
  • 系统架构设计(七):数据流图
  • 售前工作.工作流程和工具
  • 从专家编码到神经网络学习:DTM 的符号操作新范式
  • tp5 关键词搜索商品时进行关键词拆分
  • Slidev集成Chart.js:专业数据可视化演示文稿优化指南
  • 黄点追踪是什么?:揭秘打印机隐形识别机制的技术分析
  • windows编写和调试代码工具——IDE安装
  • QMK 宏(Macros)功能详解(实战部分)
  • muduo库TcpConnection模块详解——C++
  • CMake基础及操作笔记
  • C语言—再学习(结构体)
  • 【springcloud学习(dalston.sr1)】Zuul路由访问映射规则配置及使用(含源代码)(十二)
  • 玩转 AI · 思考过程可视化
  • 【gitee 初学者矿建仓库】
  • 【Ragflow】22.RagflowPlus(v0.3.0):用户会话管理/文件类型拓展/诸多优化更新
  • 51单片机课设基于GM65模块的二维码加条形码识别
  • python第二十八天
  • Oracle APEX IR报表下载CSV文件的方法
  • [Java] 方法和数组
  • FauxGen:一款由 CodeBuddy 主动构建的假数据生成器
  • 语音转文字
  • 使用Spring Boot与Spring Security构建安全的RESTful API
  • 基于大疆Mini 3无人机和指定软件工具链的完整3D建模工作
  • JavaScript防抖与节流全解析
  • C# lock
  • 端到端自动驾驶系统实战指南:从Comma.ai架构到PyTorch部署
  • 通义千问-langchain使用构建(三)
  • 2025年渗透测试面试题总结-百度面经(题目+回答)