zoukankan      html  css  js  c++  java
  • 41. 缺失的第一个正数

    给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。

    示例 1:

    输入: [1,2,0]
    输出: 3
    示例 2:

    输入: [3,4,-1,1]
    输出: 2
    示例 3:

    输入: [7,8,9,11,12]
    输出: 1
     

    提示:

    你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/first-missing-positive
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    O(nlogn)

    class Solution:
        def firstMissingPositive(self, nums: List[int]) -> int:
            if not nums:return 1
            nums.sort()
            if nums[0]>1:return 1
            if nums[-1]<1:return 1
            if nums[-1]==1:return 2
            for i in range(len(nums)):
                if nums[i]>=1:
                    if i>0:
                        if nums[i-1]<=0 and nums[i]>1:
                            return 1
                    if i==len(nums)-1:
                        return nums[i]+1
                    elif:nums[i+1]-1>nums[i]:
                            return nums[i]+1

    O(n)

    class Solution:
        def firstMissingPositive(self, nums: List[int]) -> int: 
            if not nums:return 1
            length =len(nums)
            if length == 1:
                if 1 in nums:
                    return 2
                else:
                    return 1
            i=0
            temp = 0
            ma = max(nums)
            
            while i < length:
                if nums[i] <= 0 or nums[i] == i or nums[i] >=length or nums[nums[i]] == nums[i]:
                    i += 1
                else:
                    nums[nums[i]],nums[i] = nums[i],nums[nums[i]]
    
            for i in range(1,length):
                if nums[i] != i:
                    return i 
            
            if ma == length:
                return length+1
            return nums[-1] +1

    好像这个也是O(n)没毛病。。。

    class Solution:
        def firstMissingPositive(self, nums: List[int]) -> int: 
            nums=set(nums)
            for i in range(1,2**31):
                if i not in nums:
                    return i
  • 相关阅读:
    题解 P2647 【最大收益】
    CF817E Choosing The Commander
    P2922 [USACO08DEC]Secret Message G
    洛谷月赛 P7107 天选之人
    如何在考场上快速用C++写高级对拍器
    题解 CF527D 【Clique Problem】
    P6768 [USACO05MAR]Ombrophobic Bovines 发抖的牛
    [USACO06NOV]Corn Fields G
    Orz 教主的比赛题解
    JZOI 4311 统一天下
  • 原文地址:https://www.cnblogs.com/xxxsans/p/13859412.html
Copyright © 2011-2022 走看看