博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【python/Hard/41】First Missing Positive
阅读量:2171 次
发布时间:2019-05-01

本文共 952 字,大约阅读时间需要 3 分钟。

题目

这里写图片描述

基本思路

分析一下:因为是最小的整数,

反正是从1,2,3。。。。开始的。
那就把每一个数,给到他们自己的位置,比如说【3,4,-1,1】
把所有的数都放到位置:变成【1,-1,3,4】 那就能找到 那个-1的位置了。
因为要常数空间,那估计的言外之意就是,交换swap。

  1. 不过这里面有坑,首先【2,3】这样的,3就不能换,也就是说大过数组长度的不要动。
  2. 而且小于0的也不能换,
  3. 还有这个【3,4,-1,1】如果只换一次。。
    先换3,变成【-1,4,3,1】
    然后4 变成【-1,1,3,4】
    哎到头了。。。这个1怎么办。。。
    所以要不停的换,换到不能换了为止:
    改成:
    先换3,变成【-1,4,3,1】,第一个位置是-1,不能换了
    再还4,变成【-1,1,3,4】,第二个位置是1,继续换【1,-1,3,4】
    后面就不换了。。。
  4. 还有一个坑:【1,2,3】。。。换到头了,怎么办,返回4。

实现代码

class Solution:    def firstMissingPositive(self, nums):        """        :type nums: List[int]        :rtype: int        """        length = len(nums)        for i in range(length):            if nums[i] > length:                continue            index = nums[i]-1            while nums[i] > 0 and index < length and nums[i] != nums[index]:                nums[i],nums[index] = nums[index],nums[i]                index = nums[i] - 1        for m in range(length):            if nums[m] != m +1:                return m +1        return length+1
你可能感兴趣的文章
初探Java设计模式3:行为型模式(策略,观察者等)
查看>>
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>
Java并发指南1:并发基础与Java多线程
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>
Java并发指南3:并发三大问题与volatile关键字,CAS操作
查看>>
Java并发指南4:Java中的锁 Lock和synchronized
查看>>
Java并发指南5:JMM中的final关键字解析
查看>>
Java并发指南6:Java内存模型JMM总结
查看>>
Java并发指南7:JUC的核心类AQS详解
查看>>
Java并发指南8:AQS中的公平锁与非公平锁,Condtion
查看>>
Java网络编程和NIO详解6:Linux epoll实现原理详解
查看>>