刷题No12. 最小未出现的正整数(java)【数组】

题目:

给出一个无序的整数型数组,求不在给定数组里的最小的正整数

例如:

给出的数组为[1,2,0] 返回3,

给出的数组为[3,4,-1,1] 返回2.

给出的数组为[4,0,3,2] 返回是1.

给出的数组是[4,2,-1,1] 返回的是3.

给出的数组是[6,7,8,9] 返回的是1.

你需要给出时间复杂度在O(n)之内并且空间复杂度为常数级的算法

思路解析如下:

 整体分成两种情况:

第一种情况是:数组是连续的。如果数组内的数字是从1连续存在的。这个时候返回的数组中的最小的正整数是数组长度n+1。如果数组是从0连续存在的,这个时候返回的数组长度n。

 比如数组是[1,2,3,4],那么返回的最小的正整数就是5.

比如数组是[0,1,2],返回的最小的正整数是3.

第二种情况是:数组不是连续的。这个时候返回的必然是小于n+1的。于是依次遍历数组中的数是否存在1到n之间的某个数,如果1到n中的某个数遍历不到则返回它。

package com.company;

public class TestNo12 {
    public static void main(String[] args) {
        TestNo12 t = new TestNo12();
        int[] a = {5,6,7,8};
        System.out.println(t.firstMissingPositive(a));
    }
    public int firstMissingPositive(int[] A) {
        int a = A.length;
        for(int i = 1;i<=a;i++){
            int count = 0;
            for(int j = 0;j<a;j++){
                if(A[j] == i)
                    count = 1; //说明1到n中的某个数被遍历到
            }
            if(count == 0)
                return i;//说明1到n中的某个数没有遍历到,于是返回没有遍历到的那个数
        }
        return a+1;
    }



}
发布了46 篇原创文章 · 获赞 11 · 访问量 3592

猜你喜欢

转载自blog.csdn.net/qq_40664693/article/details/104132599