從 JavaScript 陣列中查詢第 n 個缺失數字


在提到的問題中,我們的目標是在給定的陣列中找到第 n 個缺失數字並在 Javascript 中實現其解決方案。為了解決這個問題,我們將使用 for 迴圈和一些 Javascript 的基本函式。

給定問題的邏輯

我們的任務是在陣列中找到第 n 個缺失數字。為了解決這個問題,我們將定義兩個變數來了解缺失數字的位置和前一個元素。

因此,遍歷輸入陣列並檢查當前專案和前一個專案之間是否存在缺失專案。如果在這兩個專案之間存在缺失數字,則增加缺失專案的計數。如果計數達到給定數字,則函式將計算並返回陣列中缺失的數字。

演算法

步驟 1 − 定義一個函式,該函式將接受兩個引數 − 一個數組和 n 的值。此函式將執行查詢並返回第 n 個缺失數字的必要操作。

步驟 2 − 需要跟蹤當前值和前一個值,將這兩個變數的初始值都設定為零。

步驟 3 − 使用 for 迴圈遍歷定義的陣列的專案。在此迴圈內,檢查陣列數字和前一個數字的差值。如果它大於 1,則將計數增加這兩個數字的差值。

步驟 4 − 檢查計數值是否大於或等於 n 的指定值。如果條件為真,則透過從當前值中減去 n 並將其新增到陣列中的前一個數字來計算並返回缺失值。

步驟 5 − 因為我們想顯示第 n 個缺失數字。

演算法程式碼

//function to get the required item
function findMissingNumer(numArr, n) {
   let missingCount = 0;
   let prevNum = 0;
    
   for (let i = 0; i < numArr.length; i++) {
      const currNum = numArr[i];
      if (currNum - prevNum > 1) {
         missingCount += currNum - prevNum - 1;
         if (missingCount >= n) {
            const diff = n - (missingCount - currNum + prevNum + 1);
            return prevNum + diff;
         }
      }
      prevNum = currNum;
   }
   return prevNum + n - missingCount;
}
const arr = [1, 4, 6, 8, 10];
const n = 4;
const result = findMissingNumer(arr, n);
console.log(result);

時間和空間複雜度

上述程式碼的函式執行 n 次,因此時間複雜度為 O(n),因為迴圈的每個步驟都執行恆定時間以獲取陣列中所需的數字。並且演算法消耗的空間為 O(1),因為我們只儲存一個變數來儲存缺失數字,而不是任何其他資料結構或陣列。

結論

我們已經看到的從陣列中查詢第 n 個缺失數字的程式碼利用基本的 JavaScript 操作來完成任務。該演算法具有線性時間複雜度,這被認為是查詢陣列中第 n 個數字的有效解決方案。

更新於: 2023 年 5 月 18 日

2K+ 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.