从 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.