41. First Missing Positive

来源:互联网 发布:爱淘宝女鞋新款 编辑:程序博客网 时间:2024/05/17 03:52

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.

长度为n的数组,可连续放入正整数1~n,此题要求时间复杂度为O(n),空间复杂度为常数。
可以通过两次遍历数组来完成,第一次遍历数组,通过交换,使得数组nums[i] = i+1,nums[0]~nums[n-1]中放入1~n;第二次遍历数组,查找nums[i] != i+1,(i+1)缺失;若1~n都不缺失,则返回n+1

public class Solution {    public int firstMissingPositive(int[] nums) {        int i = 0;        int n = nums.length;        //第一次遍历数组,通过交换,使得数组nums[i] = i+1,nums[0]~nums[n-1]中放入1~n        //第二次遍历数组,nums[i] != i+1,(i+1)缺失;若1~n都不缺失,则返回n+1        while(i < n){            if( nums[i] >0 && nums[i] <= n && nums[i] != i+1 && nums[nums[i]-1] != nums[i]){                    swap(nums,i,nums[i]-1);                }            else{                i++;            }        }        for(int j = 0;j < n;j++){            if(nums[j] != j+1){                return j+1;            }        }        return n+1;    }    private void swap(int[] nums,int i,int j){        int tmp = nums[i];        nums[i] = nums[j];        nums[j] = tmp;    }}
0 0
原创粉丝点击