Given an unsorted integer array nums
, find the smallest missing positive integer.
Example 1:
Input: nums = [1,2,0]
Output: 3
Example 2:
Input: nums = [3,4,-1,1]
Output: 2
Example 3:
Input: nums = [7,8,9,11,12]
Output: 1
顺序不对时,交换一下
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class Solution { public int firstMissingPositive(int[] A) { int i = 0; while(i < A.length){ //正常情况下,i都++ if(A[i] == i+1 || A[i] <= 0 || A[i] > A.length) i++; //用if(A [A [i] -1]!= A [i])而不是if(A [i] -1!= i)是为了避免无限循环 //类似于[3,2,3,4],当i = 0时,A [0] = 3,应将其放置在位置i = 2上,其中A [2] =3。因此没有需要进行交换并转到else语句i ++以进行下一步检查,否则它将陷入无限循环 else if(A[A[i]-1] != A[i]) { swap(A, i, A[i]-1); } else i++; } System.out.println("整理后的数组 = "); for (int k = 0; k < A.length; k++) { System.out.println("A[k] = " + A[k]); } System.out.println(" "); //1,-1,3,4 i = 0; while(i < A.length && A[i] == i+1) { System.out.println("A[i] = " + A[i]); System.out.println("i+1 = " + (i+1)); i++; } //A[i] = 1, i+1 = 1 //i = 1是负数,就不行了.返回缺失的2.所以是怎么把-1丢到2的位置上了呢? //好像意思是主动把元素放到正确的位置。这样错误的自然就在错误的位置上了。 return i+1; } private void swap(int[] A, int i, int j){ int temp = A[i]; A[i] = A[j]; A[j] = temp; } }