题目:
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.
方法:
既然是正整数,那么可以考虑将正整数跟下标对应起来存放。正整数不包括0,则下标0存放1,1存放2,以此类推。
从下标0开始,遍历整个数组;
对于下标为i的数cur,若cur在A的范围之内,则寻找A[cur-1],若A[cur-1]!=cur,则记下 tmp = A[cur-1],将A[cur-1]赋值为cur,
然后将cur赋值为tmp,进行下一个循环,直到,cur超出A的范围或者A[cur-1]==cur.(当A[cur-1]==cur时,如果不跳出循环,则会进入死循环)。
跳出循环之后,继续遍历数组剩下的部分,直到遍历结束。
最后,将A从头开始遍历,遇到A[i]!=i+1的时候就是第一个缺失的正整数。
AC代码:
public int firstMissingPositive(int[] A) { if(A==null || A.length==0) return 1; for (int i = 0; i < A.length; i++) { int cur = A[i]; while (cur >= 1 && cur - 1 < A.length) { int tmp = A[cur - 1]; if(A[cur-1]!=cur){ A[cur - 1] = cur; cur = tmp; } else break; } } for(int i=0;i<A.length;i++){ if(A[i]!=i+1){ return i+1; } } return A[A.length-1]+1; }
时间: 2024-11-03 22:03:31