第三题 O(N) O(1) public int firstMissingPositive2 (int[] A) { int left = 0; int right = A.length; while(left<right){ if(A[left]==left+1){ left++; }else if(A[left]>right || A[left]<=left || A[A[left]-1]==A[left]){ A[left] = A[--right]; }else{ swap(A,left,A[left]-1); } } return left+1; } private void swap(int[] arr,int i1,int i2){ if(i1!=i2){ int tmp = arr[i1]; arr[i1] = arr[i2]; arr[i2] = tmp; } }