zoukankan      html  css  js  c++  java
  • 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
    
    
    



  • 相关阅读:
    JSOI2010 满汉全席
    LNOI2014 LCA
    BZOJ3689 异或之
    Codeforces Round #553 div.2
    AHOI2013 差异
    SDOI2016 生成魔咒
    NOI2006 最大获利
    没有过的题QAQ
    NOI2014 动物园
    HDU4622 Reincarnation
  • 原文地址:https://www.cnblogs.com/immiao0319/p/14446741.html
Copyright © 2011-2022 走看看