从数组中查找第 n 个缺失数字 JavaScript

javascriptweb developmentfront end technology

在提到的问题中,我们的目标是在给定的数组中找到第 n 个缺失的数字,并在 Javascript 中实现其解决方案。为了解决这个问题,我们将使用 for 循环和一些基本的 Javascript 函数。

给定问题的逻辑

我们的任务是找到数组中缺失的第 n 个数字。为了解决这个问题,我们将定义两个变量来了解缺失数字和前一个元素的位置。

因此,遍历输入数组并检查当前项和前一个项之间的缺失项。如果这两个项之间存在缺失数字,则增加缺失项的计数。如果计数达到给定的数字,函数将计算并返回数组中的缺失数字。

算法

步骤 1 - 定义一个函数,它将接受两个参数 - 一个数组和 n 的值。此函数将执行必要的操作以查找并返回第 n 个缺失数字。

步骤 2 - 需要跟踪当前值和先前值,将两个变量的初始值都设为零。

步骤 3 - 借助 for 循环遍历已定义数组的项目。在此循环中,检查数组数字与先前数字的差值。如果差值大于 1,则使用两个数字的差值增加计数。

步骤 4 - 检查计数值是否大于或等于指定的 n 值。如果条件为真,则计算并返回缺失值,方法是从当前值中减去 n,并将其添加到数组中的前一个数字。

步骤 5 - 因为我们想要显示缺失的第 n 个数字。

算法代码

//函数获取所需的项目
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 个数字的有效解决方案。


相关文章