您的位置:首页 > 其它

41. First Missing Positive

2017-01-01 09:59 169 查看
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.

一刷没ac

解题思路:要求O(n),因此不能按照排序的思想来做。第一步遍历数组将负数都置为n+1,第二部遍历数组将在1-n范围内的数对应的数组下表的数置为负数,再遍历数组找到第一个不为负数的索引即可。

public class Solution {
public int firstMissingPositive(int[] nums) {
if(nums == null || nums.length == 0) return 1;
for(int i = 0; i < nums.length; i++){
if(nums[i] <= 0) nums[i] = nums.length+1;
}
for(int i = 0; i < nums.length; i++){
if(Math.abs(nums[i])-1 < nums.length){
int idx = Math.abs(nums[i])-1;
if(nums[idx] > 0) nums[idx] = -1*nums[idx];
}
}
int res = nums.length+1;
for(int i = 0; i < nums.length; i++){
if(nums[i] > 0){
res = i+1;
return res;
}
}
return res;
}

}


在discuss看到的别人的方法。

public class Solution {
public int firstMissingPositive(int[] nums) {
if(nums == null || nums.length == 0) return 1;
int i = 0;
while(i < nums.length){
if(nums[i] == i+1 || nums[i] > nums.length || nums[i] <= 0) i++;
else if(nums[i] != nums[nums[i]-1]) swap(nums, i, nums[i]-1);
else i++;
}
i = 0;
while(i < nums.length && nums[i] == i+1) i++;
return i+1;
}
public void swap(int[] nums, int i, int j){
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode