题目
 
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. 
O(n) time and uses constant space.
思路
本题题目描述的不是很详细,容易误解题意。题目中要求找到数组中未出现的第一个正整数。
 对于一个大小与N的数组,我们假设N=5。那么该数组必须是如下形式:
[1,2,3,4,5]
当我们任意将其中一个数进行替换后得到的数组就是测试数组。将2->0
[1,0,3,4,5]
关于这个问题我们的思路就是:
- 先排序
 - 再遍历找到第一个缺失的正整数
 
关于这个特殊结构的数组排序。我们可以通过交换法来实现。时间复杂度为O(n),空间复杂度为O(1)。
代码
class Solution {
    public int firstMissingPositive(int[] nums) {
        for(int i=0;i<nums.length;i++)
        {
            while(nums[i]>0&&nums[i]<=nums.length&&nums[i]!=nums[nums[i]-1])
                swap(nums,i,nums[i]-1);
        }
        for(int i=0;i<nums.length;i++)
        {
            if(i!=(nums[i]-1))
            {
                return i+1;
            }
        }
        return nums.length+1;
    }
    private static void swap(int[] nums,int i,int j)
    {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}                










