题目描述:
// 给定一个未排序的整数数组,找出其中没有出现的最小的正整数。
//
// 示例 1:
//
// 输入: [1,2,0]
// 输出: 3
// 示例 2:
//
// 输入: [3,4,-1,1]
// 输出: 2
// 示例 3:
//
// 输入: [7,8,9,11,12]
// 输出: 1
//下方程序已验证通过,用时较长,188ms

var firstMissingPositive = function(nums) {
if (nums === undefined || nums.length == 0 || (nums.length == 1 && nums[0]!=1)) {//输入部分没有元素或者只有一个元素且不为1时
return 1;
}
if(nums.length == 1 && nums[0]==1){ //只有一个元素,且为1,则返回2
return 2;
}
nums.sort(function(a,b){
return a - b;
}); //使用排序算法时需注意:不传参数按字符排序。需要自己传入回调函数

for(var i=0;i<nums.length;i++){ // -1 0 1 2 3 4 返回5
if(nums[i]>0){
break;
}
}
// console.log("i= "+i);
var tmp = nums[i]; //使用一个变量保存 nums[i],因为后续 nums[i]一直改变,不能在下面的for循环中直接使用 if(nums[i]!=1).
for(var j=i;j<nums.length;j++){
if(tmp!=1){
return 1;
}
if((nums[i]==nums[j]) || (nums[j]-nums[i]==1)){
// console.log("nums0["+i+"] = "+nums[i]);
nums[i]=nums[j];
// console.log("nums1["+i+"] = "+nums[i]);
}else{
return nums[i]+1;
}
}
return nums[i]+1;
};
var arr=[1,2,0];
console.log(firstMissingPositive(arr));
posted on 2019-01-16 22:46  yyzyyx  阅读(592)  评论(0编辑  收藏  举报