找到第一个丢失的正数
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.
此题关键在于理解first missing positive intege。
题意为:一共n个数,有正数有负数,还有0.找到一个最小的正数不在这个集合中
可以分析得到,整个最小的正数,最小是1,最大是 n + 1.
解法1:
用hash保存一下每个元素,然后从1开始查,check是否在hash里面,不在输出即可。
简单明了,但是如果空间复杂度有限制?即 不用hash怎么办?
解法2:
用数组本身作为hash表进行查找,代码如下:
int firstMissingPositive(int A[], int n) {
int i;
for (i = 0; i < n; ) {
if (A[i] == i + 1) {
++i;
}
else if ((A[i] < i + 1) || (A[i] - 1 >= n) || (A[A[i] - 1] == A[i])) {
A[i] = A[--n];
}
else {
int t = A[i];
A[i] = A[t - 1];
A[t - 1] = t;
}
}
return n + 1;
}
思路超级赞!

浙公网安备 33010602011771号