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个数字的高效解决方案。