41. 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.
解法一
将数组中的元素放入到set里面,然后从1到nums的长度判断是否在set中,如果不在,则缺当前值。
public class Solution {
public int firstMissingPositive(int[] nums) {
if (nums.length == 0 || nums == null) {
return 1;
}
Set<Integer> set = new HashSet<Integer>();
for (int num : nums) {
set.add(num);
}
for (int i = 0; i < nums.length; i++) {
if (!set.contains(i + 1)) {
return i + 1;
}
}
return nums.length + 1;
}
}
解法二
O(1)的空间复杂度,将每个元素交换到应在的位置,最后看哪一位不符合要求。
public class Solution {
public int firstMissingPositive(int[] nums) {
if (nums.length == 0 || nums == null) {
return 1;
}
for (int i = 0; i < nums.length; i++) {
while (nums[i] != i + 1 && nums[i] > 0 && nums[i] - 1 >= 0 && nums[i] - 1 < nums.length
&& nums[i] != nums[nums[i] - 1]) {
swap(nums, i, nums[i] - 1);
}
}
for (int i = 0; i < nums.length; i++) {
if (nums[i] != i + 1) {
return i + 1;
}
}
return nums.length + 1;
}
private void swap(int[] nums, int a, int b) {
int temp = nums[a];
nums[a] = nums[b];
nums[b] = temp;
}
}