JavaScript 中数组中的三个严格递增的数字(连续或非连续)
给定的问题是尝试借助 javascript 在数组中找到三个具有连续或非连续数字的严格递增的数字。
理解问题
在开始为给定的问题编写算法和程序之前,我们首先要了解问题背后的逻辑。
考虑一组包含一些随机数的数组。因此,JavaScript 允许我们循环遍历数组并跟踪最小值和第二小值,以找到三个严格上升的数字。
在此算法中,如果发现第三个值高于这两个值,我们将发现三个严格增长的整数。
算法
步骤 1 - 在第一步中,构建一个名为 find3IncreasingNum 的函数。此函数将检查三个连续数字是否按递增顺序排列。
步骤 2 − 第二步将定义两个全局变量,名为 Infinity。Infinity 将定义全局范围的属性。
步骤 3 − 第三步定义一个 for 循环,以遍历数组中存在的所有项目或数字。
步骤 4 − 下一步指定当前对象,该对象被初始化为数组的第一个元素。然后,将使用接下来的数字检查此当前值,并检查它是否大于或小于当前数字。
步骤 5 − 现在我们已经逐一检查了所有数字。并得出解决方案。
第 6 步 − 在最后一步中显示调用函数后的输出。
示例
// 用于存储数字的示例数组
function find3IncreasingNum(arr) {
let first = Infinity;
let second = Infinity;
for (let i = 0; i < arr.length; i++) {
const current = arr[i];
if (current <= first) {
first = current;
} else if (current <= second) {
second = current;
} else {
return true; // found a triplet
}
}
return false; // no triplet found
}
const arr = [10, 20, 30, 40, 50];
console.log(find3IncreasingNum(arr));
const arr2 = [50, 40, 30, 20, 10];
console.log(find3IncreasingNum(arr2));
const arr3 = [10, 50, 20, 40, 30];
console.log(find3IncreasingNum(arr3));
输出
true false true
此代码定义了三个整数数组,其中包含不同的值。它们的名称分别为 arr、arr2 和 arr3'。有三种输出:true、false 和 true。第一个 true 表示给定的输入数组具有连续的整数,第二个输出表示数组中不存在连续的数字,第三个输出表示数组中存在一系列数字。
算法
步骤 1 - 创建一个 n 位数字数组。
步骤 2 - 定义一个新数组并初始化为空。此数组将使用子数组存储数组的所有连续元素的组。
步骤 3 - 创建一个子数组来存储数组的连续数字。
步骤 4 - 初始化 numArray 的 for 循环,直到达到数组的长度。
步骤 5 - 现在从 numArray 中推送子数组中的所有连续项。
步骤 6 - 检查条件,如果连续项之间的差不等于 1。然后将其推送到 newArray。
步骤 7 - 现在显示所有连续数字的组作为输出。
示例
const numArray = [40,39,38,50,49,48,70,20];
// 定义一个新数组
const newArray = [];
// 连续组的子数组
var subArray = [];
for(var i=0; i<numArray.length; i++) {
// 将新项目推送到子数组
subArray.push(numArray[i]);
// 如果下一个项目不连续,则将子数组推送到新数组
if(numArray[i] - numArray[i+1] != 1) {
newArray.push(subArray);
subArray = [];
}
}
console.log("连续数字组")
console.log(newArray);
输出
连续数字组 [ [ 40, 39, 38 ], [ 50, 49, 48 ], [ 70 ], [ 20 ] ]
时间和空间复杂度
输入数组的长度 n 决定了执行函数"find3IncreasingNum()"所需的时间。这是因为它使用的 for 循环一次循环遍历整个数组。对于数组中的每个元素,还会执行固定数量的操作。
该函数占用 O(1) 空间。这种复杂性是由以下事实引起的:无论输入数组的大小如何,该函数都会消耗固定数量的额外空间。为了跟踪数组的组件,它仅构造第一个、第二个和当前变量。
因此,代码的空间复杂度是恒定的,而时间复杂度是线性的。
结论
我们可以看到这个问题是多么简单。我们必须逻辑地思考并遵循某些步骤才能处理任何困难。对于各种输入数组,我们看到了三种不同的输出。用于评估算法有效性的两个指标是时间复杂度和空间复杂度。
相关文章
有用资源
javascript 参考教程 - 该教程包含有关 javascript 的更多信息:https://www.cainiaomax.com/javascript/

