41. First Missing Positive 第一个缺失的正整数

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

顺序不对时,交换一下

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;
    }
}
View Code

 




posted @ 2021-02-25 14:26  苗妙苗  阅读(73)  评论(0)    收藏  举报