题目: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