leetcode.array--41. First Missing Positive

题目:41. First Missing Positive

问题描述:https://leetcode.com/problems/first-missing-positive/description/

意思是说,给定一个数组,找到该数组中缺失的第一个正整数例如[3,4,-1,1]缺失的第一个正整数是2,[1,2,0]缺失的第一个正整数是3。要求时间复杂度O(n),空间复杂度O(1)。

没想出来再见看得别人的代码。思路是这样:把正整数num放到num-1的位置,然后再遍历一遍,找到nums[i]!=i+1的位置并返回i+1。

Python:

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

其次,Python中交换两个元素的位置不需要中间变量,例如:

a=13
b=17
a,b=b,a
print(a,b) # 17 13
此外,不使用中间变量而达到交换的目的有以下两种通用方法:

1、使用加法,例如:

a=13
b=17
a=a+b
b=a-b
a=a-b
print(a,b) # 17 13

2、使用异或,例如:

a=13
b=17
a^=b
b^=a
a^=b
print(a,b) # 17 13


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值