Javascript 数组中未出现的最小正整数

966 阅读1分钟

题目描述

给定一个无序数组arr,找到数组中未出现的最小正整数

例如arr = [-1, 2, 3, 4]。返回1

arr = [1, 2, 3, 4]。返回5

[要求]

时间复杂度为O(n),空间复杂度为O(1)

示例1

输入

[-1,2,3,4]

返回值

1

/**
 * return the min number
 * @param arr int整型一维数组 the array
 * @return int整型
 */
function minNumberdisappered( arr ) {
    arr=arr.sort();
    var size=arr.length;//数组长度
     //判断数组第一项是否大于零
    if(arr[0]>0){
        //判断数组是不是刚好顺序递增
        if(arr[size-1]-arr[0]==size-1){
             //数组顺序递增的话,就判断第一项是不是大于1,大于1的话就返回1,不是的话,就返回数组的最后一项加1
            if(arr[0]>1){
                return 1;
            }else{
                return arr[size-1]+1;
            }
        }else{
            //如果不是顺序递增,就找到间隔不是1的那一项,返回前一项的值加1
            for(var i=1;i<size;i++){
                if(arr[i]-arr[i-1]>1){
                    return arr[i-1]+1;
                }
            }
        }
    }else{
        for(var i=1;i<size;i++){
            if(arr[i]>0){
                if(arr[i-1]<=0){
                    if(arr[i]>1){
                        return 1;
                    }else if(arr[i]==1){
                        if(arr[size-1]-arr[i]==size-1){
                            return arr[size-1]+1;
                        }else{
                            for(var j=i;j<size;j++){
                                if(arr[j]-arr[j-1]>1){
                                    return arr[j-1]+1;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    
}