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.
----------------------------------------------------------------
# Pass 1, move every value to the position of its value
因为找的是第一个非0,所以把1存在0,2存在1
while里的条件是检测下一个位置是否已经匹配好,如果检查当前位置的话,会进入死循环,因为会有重复的数字如[1,1]
# Pass 2, find first location where the index doesn't match the value
reference
class Solution {
public:
int firstMissingPositive(int A[], int n) {
for (int i = 0; i < n; i++) {
int target = A[i];
while (target > 0 && target <= n && A[target - 1] != target) {
int temp = A[target - 1];
A[target - 1] = target;
A[i] = temp;
target = A[i];
}
}
for (int i = 0; i < n; i++) {
if (i + 1 != A[i]) {
return i + 1;
}
}
return n + 1;
}
};
No comments:
Post a Comment