[leetcode题后感]first missing positive
来源:互联网 发布:论文代发机构 知乎 编辑:程序博客网 时间:2024/05/29 07:13
这个题有点坑 题目就没读懂啥意思 百度了各路大神之后才知道 是求第一个没出现过的正整数
题目很简单 但是限制条件很苛刻 要求O(n)时间和O(1)的空间 所以难度增加
思路大概如下
既然是n个数字的数组,那么也就是求1-n中数字第一个没再数组中出现的就是所求的
既然不让用多余的空间,那么久考虑在原数组上做文章,而数组下标的特性,正好是0-n-1的n个数字
所以很自然想到 讲0 - n-1 和1-n相对应,一开始想扫描整个数组 当出现一个数字的时候 把这个数字所对应的值取出来 然后把值改为特殊的标志变量 比如INT_MAX之类的 但是这样做的话很难保证不会和原数组的输入数字重复,所以又很想到那我直接存这个数字本身不就好了,即把该数字存到该数字所对应的位置。但是这样就要考虑有可能发生的遇到了相同数字怎么办 如果遇到相同数字可能会产生死循环,因为只要在交换数字的时候加一个判断 若目标位置所存的数字已经满足了标志(即a[i]=i+1)那么就不做交换。
所以算法如下
依次扫描每一个元素,若当前位置符合a[i]=i+1,则跳过本次循环,当不符合条件时候讲当前位置的数字放到当前数字-1的位置,若目标位置已经满足a[j]=j+1则不做交换,否则一直交换,直到换过来的数字无法赋值给新的位置位置(即数字超过数组下标范围)
至此leetcode可以ac
但是我对于这个算法不是很确定 虽然满足了O(1)的空间复杂度,但是时间复杂度方面,由于需要两个循环,我也没办法确定是否是O(n)的,但是百度了一下发现大家也都是这么做的而且也存在一定的争论。所以还是期待新的方法产生。
0 0
- [leetcode题后感]first missing positive
- LeetCode: First Missing Positive
- LeetCode First Missing Positive
- LeetCode: First Missing Positive
- [Leetcode] First Missing Positive
- [LeetCode] First Missing Positive
- [Leetcode] First Missing Positive
- leetcode First Missing Positive
- LeetCode First Missing Positive
- [leetcode] first missing positive
- LeetCode: First Missing Positive
- [LeetCode]First Missing Positive
- LeetCode-First Missing Positive
- [leetcode] First Missing Positive
- [LeetCode] First Missing Positive
- LeetCode - First Missing Positive
- LeetCode | First Missing Positive
- Leetcode: First Missing Positive
- 关于const的一些知识点小结
- 安卓去掉应用默认的名字
- 安卓即时通讯项目--xmpp实现方法
- java中时间的基本使用即转换
- 输入和输出运算符
- [leetcode题后感]first missing positive
- C++动态存储的应用
- MySQL数据库大数据处理
- NoSQL 在腾讯应用实践
- C++内存
- jquery mobile跳转到指定id时怎样传递参数
- DSP28335—CMD文件中的各个段解释
- CSS z-index 属性的使用方法和层级树的概念
- 在ASP.NET中使用JSON