First Missing Integer

来源:互联网 发布:淘宝400电话 编辑:程序博客网 时间:2024/06/05 10:34

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.


11/1

近brutal-force

public class Solution {    public int firstMissingPositive(int[] A) {        // strategy: let A[i] store i+1, thus return the first i s.t. A[i] != i+1        int len = A.length;        boolean[] shown = new boolean[len+1];                for(int a:A){            if(a <= len && a>= 0){                if(!shown[a]){                    shown[a] = true;                }            }        }                for(int i=1; i<=len; i++){            if(!shown[i])   return i;        }                return len+1;    }    }

比较tricky的一种解法, 特别小心err2处的错误

public class Solution {    public int firstMissingPositive(int[] A) {        // strategy: let A[i] store i+1, thus return the first i s.t. A[i] != i+1        int len = A.length;        for(int i=0; i<len; i++){            while(A[i] != i+1 && A[i] <= len && A[i] > 0 && A[i] != A[A[i]-1]){ // err1: A[i] > 0                // swap A[i] with A[A[i]-1]                int tmp = A[i];                A[i] = A[A[i]-1];                A[tmp-1] = tmp; // err2: very careful, A[i] has changed above, so use tmp in both place!            }        }                for(int i=0; i<len; i++){            if(A[i] != i+1){                return i+1;            }        }                return len+1;    }    }

classic solution:

O(1) space and O(n) for time.

0 0
原创粉丝点击