# \#448 Find All Numbers Disappeared in an Array ## *給定一連續數字陣列nums(元素可能重複), 回傳該陣列缺少的數字(回傳型態:數字陣列)* ## Log - build 20210821 by syhuang ## 初見 - 先對傳入的數字陣列排序(升冪) - 用兩個變數preNum和nowNum紀錄上一個數字和當前數字做比較, 如果差>1表示中間有缺少的數字, 用迴圈把這些數字做紀錄 - edge case是陣列開頭和結尾的部分可能出現未從1開始, 或nums.length結尾, 分別處理這種情況 - leetcode submit runtime 24%, memory 5% ```javascript= var findDisappearedNumbers = function(nums) { let sortedNums = nums.sort(function(a, b) {return a - b;}); let result = []; let finalNum = sortedNums.length; let preNum = sortedNums[0]; let nowNum = 1; //開頭 for(; nowNum < preNum; nowNum++) result.push(nowNum); for(let i=0; i<sortedNums.length; i++){ nowNum = sortedNums[i]; if(nowNum - preNum > 1){ console.log('now in') preNum++; while(nowNum>preNum){ result.push(preNum); preNum++; } } preNum = sortedNums[i]; } //收尾 for(; nowNum < finalNum; nowNum++) result.push(nowNum+1); return result; }; ``` ## 備註 - 這題有[另一種](https://ithelp.ithome.com.tw/articles/10225673)特殊解法:用元素作為index檢查其對應的nums[index], 當index+1與nums[index]不相同時標記負數, 最後再檢查陣列中哪個元素非負數, 該元素的index就是缺少的數字, 效率較佳, 但這種解法是for該題目的限制數字範圍在[1,n]才能成立 ## 參考 ###### tags: `leetcode`, `leetcode-easy`