leetcode41-- First Missing Positive

leetcode41-- First Missing Positive

题目

Given an unsorted integer array, find the smallest missing positive integer.

Example 1:

Input: [1,2,0]
Output: 3

Example 2:

Input: [3,4,-1,1]
Output: 2

Example 3:

Input: [7,8,9,11,12]
Output: 1

题目的意思即找到第一个没有的正数,要求用O(n)的时间复杂度和O(1)的空间复杂度。

其实如果没有上面的要求的话是很容易找出来的,比如先把最大值给找出来,然后从1到最大值,看它是否在nums中,如果不在就把它返回,

但是要求用的是,在网上找到了大神是这么做的,但是没有通过测试

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

这个的意思是希望把nums[i]放到nums[nums[i]-1]的地方去,即希望得到的nums是1,2,3,。。。,

所以要nums大于0并且nums[i]<=n, 并且当nums[nums[i]-1] != nums[i]的时候就交换它们的位置,因为按上面的想法是该相等的, 然后再遍历一遍找到这个数字。

但是没有通过测试. 可能python太慢了,用c++的话就能直接能过。

打赏,谢谢~~

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,多谢支持~

打开微信扫一扫,即可进行扫码打赏哦