public int firstMissingPositive(int[] a) {
        if (a == null || a.length==0){
            return 1;
        }

        int i=0;
        while(i<a.length){
            if(a[i] >0 && a[i]<a.length &&
                a[a[i]-1] != a[i] && a[i] != i+1){
                swap(a, i, a[i]-1);
            }
            else{
                i++;
            }

        }

        i=0;
        while (i<a.length){
            if (a[i] != i+1){
                return i+1;
            }
            ++i;
        }
        return a.length +1;
    }