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.
题目解析:因为题目给了时间和空间限制,否则就很好解决了
这里,用到了数组之间的变换,使得A[i] = i + 1;
tmp = A[i]; A[i] = tmp - 1;A[tmp - 1] = tmp;
源代码:
int firstMissingPositive(int* nums, int numsSize) {
if (numsSize <= 0) return 1;
int pos = 0;
while(pos < numsSize) {
if (nums[pos] <= numsSize && nums[pos] > 0
&& nums[pos] != pos + 1
&& nums[pos] != nums[nums[pos] - 1]) {
int temp = nums[pos];
nums[pos] = nums[temp - 1];
nums[temp - 1] = temp;
}
else {
pos++;
}
}
for (int i = 0; i < numsSize; ++i){
if (nums[i] != i + 1) return i + 1;
}
return numsSize + 1;
}