题目描述
给定一个无序数组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;
}
}
}
}
}
}
}
}
}