1. 程式人生 > >【JS】陣列中缺失的數字

【JS】陣列中缺失的數字

給定一個包含 0, 1, 2, …, n 中 n 個數的序列,找出 0 … n 中沒有出現在序列中的那個數。

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

示例 2:
輸入: [9,6,4,2,3,5,7,0,1]
輸出: 8

示例 3:
輸入: [1]
輸出: 0

說明:
你的演算法應具有線性時間複雜度。你能否僅使用額外常數空間來實現?


解法一:

可以累加陣列內的值,之後使用0+1+2…+N的和減去前面的值,得到的就是缺失的數字了。

// 2018/11/15 Thu 下午
var missingNumber = function(nums) {
    var n=0,len=nums.length;
    for(var i=0;i<len;i++){
        n+=nums[i];
    }
   return (1+len)*(len/2)-n;
};

122 / 122 個通過測試用例
執行用時:76 ms

解法二:

最常用的就是這種方法了,對陣列進行順序排序,然後使用迴圈對比右邊數字與當前數字的差值是不是1,不是就返回當前的數字加1。

var missingNumber = function(nums) {
    nums=nums.sort(sortNum);
    for(var i=0,n;i<nums.length;i++){
        if(nums[i]+1!=nums[i+1]){
            n=nums[i]+1;break;
        }
    }
    return nums[0]!=0?0:n;
};
var sortNum=function(a,b){return a-b}

122 / 122 個通過測試用例
執行用時:172 ms