Leetcode 41题:寻找第一个缺失的正整数

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...
摘要由CSDN通过智能技术生成

年前去面试被问到的一个题目,面试官没说复杂度要求,我想的是先排序,再从1开始查找,查到不存在的就是要找的数字。写了个快速排序,然后二分查找,后来还没写完,被面试官嫌弃写的太慢,讲了思路,被面试官嫌弃太复杂,感觉不太好。回来后网上查了解法,原来这个题目是有复杂度要求的,不能排序,呵,反正这个解法我自己绝壁是想不出来的。

以下为参考这位大神的题解自己总结的。
缺失的正整数
题目:
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。
你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间

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

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

示例 3:
输入: [7,8,9,11,12]
输出: 1

思路:
假设数组的大小是N,那么如果从1开始存放连续数字的话,数组中最大能存的数字是N。
现在移动数组中的数字,如果1存在的话,使1放在第0个位置,如果2存在的话,使2放在第1个位置,负数和0,以及大于N的数字在数组中找不到位置,暂且叫它们“非法数字”,碰到非法数字的话不用移动,遍历数组完成所有数字移动。然后再遍历数组,如果哪个位置该放某个数字而没有放,也就是说这个位置上的数字是非法数字

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值