缺失的第一个正数
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。
示例 1:
输入: [1,2,0]
输出: 3
示例 2:
输入: [3,4,-1,1]
输出: 2
示例 3:
输入: [7,8,9,11,12]
输出: 1
说明:
你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。
class Solution:
# @param A, a list of integers
# @return an integer
def firstMissingPositive(self, A):
i = 0
while i < len(A):
# 对于数组中的负数,不会影响题目的结果
# 因为最小的正数是从1开始,则得到的结果不超过数组的长度,
# 那么对于数组中所有大于数组长度的值,不会影响得到的结果
# A[i] != A[A[i] - 1]如果当前的位置已经在正确的位置则跳过
if A[i] > 0 and A[i] - 1 < len(A) and A[i] != A[A[i]-1]:
# 将顺序颠倒的数字交换位置,并放在正确的位置上
A[A[i]-1], A[i] = A[i], A[A[i]-1]
else:
i += 1
# 最后得到的结果为1,2,3,4。。。
# 如果结果做对比找到最小的数
for i, integer in enumerate(A):
if integer != i + 1:
return i + 1
return len(A) + 1
if __name__ == "__main__":
print(Solution().firstMissingPositive([1,2,0]))
print(Solution().firstMissingPositive([3,4,-1,1]))