找到第一个丢失的正数
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; }
思路超级赞!