您的位置:首页 > 其它

leetcode -- First Missing Positive -- 简单trick题目

2015-12-22 20:01 537 查看
https://leetcode.com/problems/first-missing-positive/

思路1 swap

参考/article/6999390.html

http://chaoren.is-programmer.com/posts/42711.html

这里要对比missing Number题目,missing number是在0-n这n+1个数中选n个数,找那个miss掉了。用用idx于nums[idx]异或就可以了。这里不一样,是一个任意的unsorted array,找一个first missing positive.

通过swap, 把index = i上面放上元素 i + 1. 最后scan一遍,第一个A[i] != i + 1的 i + 1就是结果

这个程序在i = 0开始scan,碰到不满足A[i] != i + 1的条件时,那么就将这个A[i]换到满足条件的位置上,即A[A[i]-1]上,所以这里A[i]-1还不能越界,如果换来的A[A[i] - 1]依然不满足条件,那么就继续换一直换到满足条件。这里还要注意只有A[i] != A[A[i]-1]才交换。

class Solution(object):
def firstMissingPositive(self, A):
length = len(A)
i = 0
while i < length:
if A[i] != i + 1 and A[i] >= 1 and A[i] <= length and A[i] != A[A[i]-1]:
# swap A[i], A[A[i]-1]
A[A[i]-1], A[i] = A[i], A[A[i]-1]
else:#这里要注意一定要加这个else。意思就是说swap之后,A[i]被swap走了,换来了A[A[i]-1], 这个值也要考虑是否要将其swap走。
i += 1
for i in xrange(length):
if A[i] != i + 1:
return i + 1
return length + 1


思路2

/article/4981610.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: