首页 > 代码库 > [Leetcode] 41 - First Missing Positive
[Leetcode] 41 - First Missing Positive
原题链接:
在不开辟另外空间的情况下,这道题做法比较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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。