您的位置:首页 > 其它

41. First Missing Positive

2016-01-12 10:23 459 查看
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: