【python/Hard/41】First Missing Positive

本文介绍LeetCode中的难题First Missing Positive。通过分析,我们可以将每个数放到其对应的位置,如将3放到索引2的位置,形成[1, -1, 3, 4]。在常数空间内进行交换操作,但要注意,大于数组长度及小于0的数不进行交换。通过不断交换,直到无法交换为止,例如[3, 4, -1, 1]最终会变为[1, -1, 3, 4]。若数组变为[1, 2, 3],则返回4作为结果。" 132650981,8065640,FreeCAD二次开发:合并几何元素与生成拓扑形状,"['FreeCAD', 'Python', '三维建模', '软件开发']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

这里写图片描述

基本思路

分析一下:因为是最小的整数,
反正是从1,2,3。。。。开始的。
那就把每一个数,给到他们自己的位置,比如说【3,4,-1,1】
把所有的数都放到位置:变成【1,-1,3,4】 那就能找到 那个-1的位置了。
因为要常数空间,那估计的言外之意就是,交换swap。

  1. 不过这里面有坑,首先【2,3】这样的,3就不能换,也就是说大过数组长度的不要动。
  2. 而且小于0的也不能换,
  3. 还有这个【3,4,-1,1】如果只换一次。。
    先换3,变成【-1,4,3,1】
    然后4 变成【-1,1,3,4】
    哎到头了。。。这个1怎么办。。。
    所以要不停的换,换到不能换了为止:
    改成:
    先换3,变成【-1,4,3,1】,第一个位置是-1,不能换了
    再还4,变成【-1,1,3,4】,第二个位置是1,继续换【1,-1,3,4】
    后面就不换了。。。
  4. 还有一个坑:【1,2,3】。。。换到头了,怎么办,返回4。

实现代码

class Solution:
    def firstMissingPositive(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        length = len(nums)
        for i in range(length):
            if nums[i] > length:
                continue
            index = nums[i]-1
            while nums[i] > 0 and index < length and nums[i] != nums[index]:
                nums[i],nums[index] = nums[index],nums[i]
                index = nums[i] - 1
        for m in range(length):
            if nums[m] != m +1:
                return m +1
        return length+1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值