【JS】陣列中缺失的數字
阿新 • • 發佈:2018-11-21
給定一個包含 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