LeetCode: First Missing Positive
2012-10-04 21:42
369 查看
Problem:
Given an unsorted integer array, find the first missing positive integer.
For example,
Given
and
Your algorithm should run in O(n)
time and uses constant space.
很有技巧性的一道题。参考http://blog.unieagle.net/?p=594。
第一次遍历,设置所有的非正整数为一个无关紧要的数,如n+2,因为其永远不可能为解。
第二次遍历,用第i位数的正负来表示数i+1是否在数组A[]中。
第三次遍历,如遇到A[i]为整数,则i+1不在数组A[]中,如果1~n都在,则返回n+1。
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.
很有技巧性的一道题。参考http://blog.unieagle.net/?p=594。
第一次遍历,设置所有的非正整数为一个无关紧要的数,如n+2,因为其永远不可能为解。
第二次遍历,用第i位数的正负来表示数i+1是否在数组A[]中。
第三次遍历,如遇到A[i]为整数,则i+1不在数组A[]中,如果1~n都在,则返回n+1。
class Solution { public: int firstMissingPositive(int A[], int n) { // Start typing your C/C++ solution below // DO NOT write int main() function if (n == 0) return 1; for (int i = 0; i < n; ++i) if (A[i] <= 0) A[i] = n + 2; for (int i = 0; i < n; ++i) { int idx = abs(A[i]) - 1; if (idx < n && idx >= 0) { if (A[idx] > 0) A[idx] = ~A[idx] + 1; } } for (int i = 0; i < n; ++i) { if (A[i] >= 0) return i + 1; } return n + 1; } };
相关文章推荐
- Leetcode:First Missing Positive
- LeetCode--First Missing Positive (第一个丢失的正整数)Python
- 【LeetCode】First Missing Positive
- Leetcode First Missing Positive
- First Missing Positive leetcode
- [leetcode]First Missing Positive
- [leetcode]First Missing Positive
- [LeetCode] First Missing Positive 解题报告
- First Missing Positive -- LeetCode
- LeetCode: First Missing Positive
- leetcode 41:First Missing Positive
- (LeetCode 41)First Missing Positive
- LeetCode First Missing Positive
- leetcode First Missing Positive
- leetcode: First Missing Positive
- 【leetcode】 First Missing Positive
- leetcode:First Missing Positive 【Java】
- [Leetcode 41] First Missing Positive
- leetcode || 41、First Missing Positive 问题
- Leetcode: First Missing Positive