求第一个丢失的正整数

定义:给定一个数组A[0....N-1],找到从1开始,第一个不在数组中的正整数。

如 3,5,1,2,-3,7,14,8 输出4

算法描述:

遍历一遍数组,若A[i] = i,i加1,继续比较后面的元素

若A[i]<i 或者A[i]>N 丢弃A[i],若A[i] > i,则将A[A[i]]和A[i]交换。

代码如下:

public static void main(String[] args) {
   int[] array = new int[8];
   array[0] = 9;
   array[1] = 8;
   array[2] = 6;
   array[3] = 5;
   array[4] = 4;
   array[5] = 3;
   array[6] = 2;
   array[7] = 1;
    firstlostNum(array);
}

public static void firstlostNum(int[] array){
   int i = 0;
   int len = array.length;
   while(i < len){
        if(array[i] == i+1){
            i++;
        }else if ((array[i] < i+1) || (array[i] > len)){
            array[i] = array[len-1];
            len--;
        }else{
            int temp = array[i];
            array[i] = array[temp-1];
            array[temp-1] = temp;
        }
   }
    System.out.println(i+1);;
}

猜你喜欢

转载自blog.csdn.net/junglerofchina/article/details/79463247