[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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老年人脚肿并痛怎么办 孩子蛙跳肌后大腿痛怎么办 走路久了腿酸怎么办 走路多了膝盖痛怎么办 走路多了小腿痛怎么办 走多了腿疼怎么办 小腿走多了酸痛怎么办 腿肚受凉了酸痛怎么办 晚上腿疼的睡不着觉怎么办 走路走多了腿酸怎么办 跳完蛙跳大腿疼怎么办 走路走多了脚疼怎么办 走太多路脚酸痛怎么办 走路走的腿酸痛怎么办 路走得太多腿疼怎么办 走路走的足弓疼怎么办 走路走多了膝盖怎么办 2岁宝宝走路一只脚内八字怎么办 6岁宝宝o型腿怎么办 一岁宝宝o型腿怎么办 宝宝一岁o型腿怎么办 宝宝一周两个月走路弓着腿怎么办 宝宝腿走路膝盖弯曲怎么办 两岁宝宝不爱走路怎么办 水鸭子脚不能走了怎么办 鸭子坐着脚走不动怎么办 鸭子步走了腿疼怎么办? 跳爵士舞没感觉怎么办 军校学员体能考核不达标怎么办 俯卧撑新兵连做不动怎么办 宝宝胆小不敢上体能课怎么办 28岁老太太抬头纹剩两颗怎么办 大腿前侧抽筋痛怎么办 电脑看片缓冲慢怎么办 跑步跑的腿疼怎么办 第一次去健身房练瑜伽不会怎么办 跑步过后腿筋疼怎么办 俯卧撑只能做20个怎么办 被裤裆峰咬了怎么办? 新兵5公里不想跑怎么办 老公掉粪坑了你怎么办