题目
思路分析
题目要求:无序数组中缺失的最小正整数
桶排序
参考博客
代码展示
from typing import List
class Solution:
#桶排序的错的理解
def firstMissingPositive1(self, nums: List[int]) -> int:
count = 0
while count<len(nums):
i = count
#虽然表面上对所有的元素进行了排序,把当前的元素放在正确的位置上
#但是,中途发生了交换,会导致被交换到前面的元素没有判断。
#问题就是出在 if,应该用 循环。
if nums[i]>0 and nums[i]<=len(nums):
nums[i],nums[nums[i]-1]=nums[nums[i]-1],nums[i]
count+=1
for i in range(len(nums)):
if nums[i]!=i+1:
return i+1
return len(nums)+1
#桶排序
def firstMissingPositive2(self, nums: List[int]) -> int:
for i in range(0,len(nums)):
# 对每一个位置 不断判断交换
#只要当前元素满足 在特定的数值范围内并且当前的元素不应该在这个位置上。
#所以 一次循环下来 当前位置上的元素 要么就是应该在这个位置上,要么不满足范围要求
while nums[i]>0 and nums[i]<=len(nums) and nums[nums[i]-1]!=nums[i]:
print(i,nums[i],nums[nums[i]-1],nums)
nums[nums[i]-1],nums[i] = nums[i],nums[nums[i]-1]
print('i:',i,nums)
for i in range(0,len(nums)):
if nums[i]!=(i+1):
return i+1
return len(nums)+1
def firstMissingPositive4(self, nums):
for i in range(1,len(nums)+2):
if i not in nums:
return i
if __name__ == "__main__":
a = Solution()
print(a.firstMissingPositive2([3,4,-1,1]))
本文详细解析了LeetCode第41题“缺失的第一个正数”,通过桶排序算法找到无序数组中缺失的最小正整数。文章提供了Python代码实现,并对比了不同方法的优劣。

被折叠的 条评论
为什么被折叠?



