首页 > 其他 > 详细

lc 41. First Missing Positive

时间:2019-01-10 14:47:31      阅读:162      评论:0      收藏:0      [点我收藏+]

https://leetcode.com/problems/first-missing-positive/

O(1)空间复杂度,找到最小的没有出现在nums中的正整数。

其实算不上严格的swap,因为不用交换,当前的位置上如果不是正确放置的(不是正确放置:nums[i]!=i)那么,就把这个数字放到正确的位置上去,不会有死循环

因为你永远不会重复处理同一个数字

小技巧:

1.强行添加一个0,把问题变成i==nums[i]的问题,否则比较复杂

2.强行添加一个len(nums)+10,保证问题的answer在len(nums)之内。就是避免给你[2,3,4,1]这种答案为5在nums之外的情况

3.while比递归好看

代码:

class Solution:
    def firstMissingPositive(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums+=[0,len(nums)+10]
        for i in range(len(nums)):
            n=nums[i]
            while 0<=n<len(nums) and n!=nums[n]:
                next=nums[n]
                nums[n]=n
                n=next
        for i in range(len(nums)):
            if nums[i]!=i:
                return i

 

lc 41. First Missing Positive

原文:https://www.cnblogs.com/waldenlake/p/10249794.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!