First Missing Positive
2014-09-05 12:52
169 查看
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.
思路:对于数组A,长度为n,那么first missing positive只能>= 1 && <= n+1
所以就用这个数组A作为counting sort的存储数组。在i的位置上记载i+1值得出现。比如: [-1, 1, 3, 4] 就转化为[1, 1, 3, 4]。在统计missing positive时,如果i位上的值不等于i+1则输出。
一个出错的地方:开始直接tmp=A[i]; A[i] = A[A[i]-1]; A[A[i]-1] = tmp 没有注意到在第三地交换的时候A[A[i]-1]已经不是原来的那个位置了
另一个出错的地方: 开始写成
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.
思路:对于数组A,长度为n,那么first missing positive只能>= 1 && <= n+1
所以就用这个数组A作为counting sort的存储数组。在i的位置上记载i+1值得出现。比如: [-1, 1, 3, 4] 就转化为[1, 1, 3, 4]。在统计missing positive时,如果i位上的值不等于i+1则输出。
一个出错的地方:开始直接tmp=A[i]; A[i] = A[A[i]-1]; A[A[i]-1] = tmp 没有注意到在第三地交换的时候A[A[i]-1]已经不是原来的那个位置了
另一个出错的地方: 开始写成
if (A[i] > 0 && A[i] <= A.length && A[i] != i+1)输入为[1,1]时候TLE
public int firstMissingPositive(int[] A) { for (int i = 0; i < A.length; i++) { if (A[i] > 0 && A[i] <= A.length && A[A[i]-1] != A[i]) { int tmp = A[A[i]-1]; //一定要先储存A[A[i]-1],否则A[i]变了之后A[A[i]-1]位置也换了 A[A[i]-1] = A[i]; A[i] = tmp; i--; } } for (int i = 0; i < A.length; i++) { if (A[i] != i+1) { return i+1; } } return A.length+1; }</span>
相关文章推荐
- LeetCode First Missing Positive
- leetcode笔记:First Missing Positive
- [LeetCode]041-First Missing Positive Integer
- First Missing Positive(leetcode)
- LeetCode 41:First Missing Positive
- LeetCode: First Missing Positive
- First missing positive
- leetcode first missing positive,覆盖区间
- First Missing Positive
- First Missing Positive
- First Missing Positive
- 【leetcode】First Missing Positive
- LeetCode OJ - First Missing Positive
- [leetcode]First Missing Positive
- LeetCode: First Missing Positive 解题报告
- leetcode第40题--First Missing Positive
- 【leetcode】First Missing Positive
- LeetCode--First Missing Positive
- [Leetcode] 41 - First Missing Positive
- 41. First Missing Positive Leetcode Python