标签:
原题链接:
在不开辟另外空间的情况下,这道题做法比较tricky。做法如下:
1. 预先扫描当前数组,将小于0的数值全部设置为n + 1,这样新的n + 1也不会对之后的计算产生影响
2. 再次扫描数组,如果当前index绝对值小于等于n,则将A[A[index] - 1]设置为负值(所以之前为什么说取绝对值)。
3. 最后扫描数组,如果当前对应值为正值,则说明当前index + 1是第一个缺失的positive number。
4. 如果都为负值,则说明n + 1是missing positive number
class Solution { public: int firstMissingPositive(int A[], int n) { for (int i = 0; i < n; ++i) { if (A[i] <= 0) { A[i] = n + 1; } } for (int i = 0; i < n; ++i) { int cur = abs(A[i]); if (cur <= n) { if (A[cur - 1] > 0) { A[cur - 1] *= -1; } } } for (int i = 0; i < n; ++i) { if (A[i] > 0) { return i + 1; } } return n + 1; } };
[Leetcode] 41 - First Missing Positive
标签:
原文地址:http://blog.csdn.net/algorithmengine/article/details/43233691