class Solution(object):
def firstMissingPositive(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
negcnt=0
for i in xrange(len(nums)):
if nums[i]<=0:
if i!=negcnt:
tmp=nums[i]
nums[i]=nums[negcnt]
nums[negcnt]=tmp
negcnt+=1
print nums,negcnt
for i in xrange(negcnt,len(nums)):
if nums[i]>0:
if len(nums)-negcnt>=nums[i] and nums[nums[i]+negcnt-1]>0:
nums[nums[i]+negcnt-1]=-nums[nums[i]+negcnt-1]
elif len(nums)-negcnt>=-nums[i] and nums[-nums[i]+negcnt-1]>0:
nums[-nums[i]+negcnt-1]=-nums[-nums[i]+negcnt-1]
for i in xrange(negcnt,len(nums)):
if nums[i]>0:
return i-negcnt+1
break
return len(nums)-negcnt+1