First Missing Positive

Given an unsorted integer array, find the first missing positive integer.

For example, Given [1,2,0] return 3, and [3,4,-1,1] return 2.

Your algorithm should run in O(n) time and uses constant space.

Solution:

public class Solution {
    public int firstMissingPositive(int[] nums) {
        for(int i=0; i<nums.length; i++)
            while(nums[i]>0 && nums[i]<=nums.length && nums[nums[i]-1]!=nums[i]) 
                swap(nums, nums[i]-1, i);
        for(int i=0; i<nums.length; i++)
            if(nums[i]!=i+1)
                return i+1;
        return nums.length+1;
    }
    public void swap(int[] nums, int i, int j){
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }
}
comments powered by Disqus