LeetCode(41) First Missing Positive
2014-12-31 08:08
267 查看
题目如下:
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.
分析如下:
首先, 要理解题意:
如果输入是{1,2,3,5},输出是4。
如果输入是{1,2,3,4}, 输入是5。
如果输入是{1000},输入是1,不是1001。
所以题目是需要你在从1 ~ +∞的范围中,找到没有在输入数组出现过的最小的正数。
然后,这道题基本上不太好想,需要借助bucket sort的思路来考虑。
首先扫描一遍数组,如果某个元素在1~n之间,则把它放入原数组中的i-1位置。最后扫描原数组一遍,找到第一个满足A[i] != i+1的数。 更加详细的分析和图片解释可以看这篇文章的解释。
我的代码:
参考资料:
1 http://www.cnblogs.com/AnnieKim/archive/2013/04/21/3034631.html
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.
分析如下:
首先, 要理解题意:
如果输入是{1,2,3,5},输出是4。
如果输入是{1,2,3,4}, 输入是5。
如果输入是{1000},输入是1,不是1001。
所以题目是需要你在从1 ~ +∞的范围中,找到没有在输入数组出现过的最小的正数。
然后,这道题基本上不太好想,需要借助bucket sort的思路来考虑。
首先扫描一遍数组,如果某个元素在1~n之间,则把它放入原数组中的i-1位置。最后扫描原数组一遍,找到第一个满足A[i] != i+1的数。 更加详细的分析和图片解释可以看这篇文章的解释。
我的代码:
//思路来自bucket sort //8ms class Solution { public: void exchange(int& a, int& b) { int tmp = a; a = b; b = tmp; } int firstMissingPositive(int A[], int n) { int i = 0; while (i < n) { if (A[i] != i + 1 && A[i] >= 1 && A[i] <= n && A[A[i] - 1] != A[i] ) //最后这个条件防止死循环 { exchange(A[i], A[A[i] - 1]); } else { ++i; } } for (int i = 0; i < n; ++i) { if (A[i] != (i + 1)) return i + 1; } return n + 1; } };
参考资料:
1 http://www.cnblogs.com/AnnieKim/archive/2013/04/21/3034631.html
相关文章推荐
- (LeetCode 41)First Missing Positive
- leetcode question 41:First Missing Positive
- leetcode 41 First Missing Positive
- [leetcode] #41 First Missing Positive
- First Missing Positive - LeetCode 41
- LeetCode 41 First Missing Positive
- leetCode (41)--First Missing Positive
- LeetCode(41)First Missing Positive
- LeetCode41 - First Missing Positive
- [LeetCode 41] First Missing Positive
- LeetCode 41 - First Missing Positive
- [Leetcode 41] First Missing Positive
- LeetCode(41)First Missing Positive
- LeetCode_41---First Missing Positive
- leetcode41_First Missing Positive
- LeetCode 41:First Missing Positive Number
- leetcode problem 41 -- First Missing Positive
- leetcode || 41、First Missing Positive 问题
- Leetcode 41 - First Missing Positive
- LeetCode 41 First Missing Positive