---
# System prepended metadata

title: \#448 Find All Numbers Disappeared in an Array
tags: [leetcode, leetcode-easy]

---

# \#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`