每天一道算法題(八)

缺失的第一個正數

給你一個未排序的整數數組,請你找出其中沒有出現的最小的正整數。

示例 1:

輸入: [1,2,0]
輸出: 3

示例 2:

輸入: [3,4,-1,1]
輸出: 2

示例 3:

輸入: [7,8,9,11,12]
輸出: 1

提示:

你的算法的時間複雜度應爲O(n),並且只能使用常數級別的額外空間。

/**
 * @param {number[]} nums
 * @return {number}
 */
var firstMissingPositive = function(nums) {
  function s(a,b){ // 排序
    if(a>b) return 1
    return -1
  }
  var sortNums = nums.sort(s);
  var j=0
  var len = sortNums.length
  if(sortNums[0]<1){ // 去除小於0的項
    while(j++<len){
    if(sortNums[j]>=1){
      break
      }
    }
    sortNums=sortNums.splice(j,len-1)
  }
  if(sortNums.length ===0){
      return 1
  }
  var mis = 1; // 默認缺失1
  var i = 1;
  while(i<len){ 
    if(sortNums[i]-sortNums[i-1] >1){
      mis = sortNums[i-1] +1;
      break;
    }
    i++
  }
  if(sortNums[0] === 1 && mis === 1){
    return sortNums[sortNums.length-1]+1
  }
  if(sortNums[0] > 1){
    return 1
  }
  return mis
};

執行用時 :76 ms
內存消耗 :35.1 MB

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章