from: https://leetcode.com/problems/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.
思路 : 用数组自身提供下标和数字的关系,这里是nums[i] 存放 值为 i+1 的数字。当数组中i位置不符合我们的预期,我们就按照这个数组应该在的位置去交换,交换要求:
1. 当前数字交换到正确位置
2. 被交换过来的数字不能和原来的数字相同
public class Solution {
public int firstMissingPositive(int[] nums) {
int len = nums.length;
for(int i=0; i<len; ) {
int n = nums[i];
if(i+1 != n && n < len && n > 0 && nums[n-1] != n) {
swap(nums, i, n-1);
} else {
++i;
}
}
for(int i=0; i<len; ++i) {
if(nums[i] != i+1) {
return i+1;
}
}
return len+1;
}
private void swap(int[] nums, int i, int j) {
nums[i] ^= nums[j];
nums[j] ^= nums[i];
nums[i] ^= nums[j];
}
}