Leetcode Link: 41. 缺失的第一个正数 - 力扣(LeetCode)
题目

解法一
思路:不考虑题目时空复杂度要求,磨磨唧唧 debug 出来了
题解:
class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
# 先排序 + 特例
nums.sort()
if nums[-1] <= 0:
return 1
# 找到第一个大于0的位置,截断,去重,重新排序(因为list后又无序了)
for i in range(len(nums)):
if nums[i] > 0:
nums = list(set(nums[i:]))
nums.sort()
break
# 找第一缺少的正整数
res = 1
for val in nums:
if val != res:
break
res += 1
return res解法二
思路:把大于 0 的都装到 set 里,然后从 1~len (nums) 一个一个找
注意一定要找len(nums), 因为有一种可能是nums里装了全部的1~len(nums),而不是 0 ~ len(nums)-1
题解:
class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
ss = set()
for val in nums:
if val>0: ss.add(val)
for now in range(1, len(nums)+1):
if now not in ss:
break
now += 1
return now解法三
思路: 缺失的第一个正数 - 缺失的第一个正数 - 力扣(LeetCode)
没几把推看明白,不想看了,脑瓜子已经迷糊了,有空再说吧
置换的方法巧,看不懂再看哈希。
题解: