JavaScript数组中三个严格递增的数字(连续或非连续)
此问题旨在利用JavaScript在数组中查找三个严格递增的数字(连续或非连续)。
理解问题
在开始为给定问题编写算法和程序之前,我们将首先了解该问题背后的逻辑。
考虑一个包含一些随机数字的数组。JavaScript允许我们遍历数组并跟踪最小值和次最小值,以查找三个严格递增的数字。
在这个算法中,如果找到第三个值大于这两个值,我们将找到三个严格递增的整数。
算法
步骤1 - 第一步,创建一个名为find3IncreasingNum的函数。此函数将检查三个连续数字是否按递增顺序排列。
步骤2 - 第二步将定义两个具有全局作用域的变量,命名为Infinity。Infinity将定义全局作用域的属性。
步骤3 - 第三步定义一个for循环来迭代数组中的所有项目或数字。
步骤4 - 下一步指定当前对象,将其初始化为数组的第一个元素。然后将此当前值与接下来的数字进行比较,并检查它是否大于或小于当前数字。
步骤5 - 现在我们已经逐个检查了所有数字。并找到了解决方案。
步骤6 - 最后一步在调用函数后显示输出。
示例
// sample array to store numbers 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中的所有连续项目推入subArray。
步骤6 - 检查条件,如果连续项目之间的差值不等于1。然后将其推入newArray。
步骤7 - 现在显示所有连续数字的组作为输出。
示例
const numArray = [40,39,38,50,49,48,70,20]; // define a new array const newArray = []; // subArray for consecutive group var subArray = []; for(var i=0; i<numArray.length; i++) { // Push new item to subArray subArray.push(numArray[i]); // If next item is not consecutive, push subArray to newArray if(numArray[i] - numArray[i+1] != 1) { newArray.push(subArray); subArray = []; } } console.log("Group of consecutive numbers") console.log(newArray);
输出
Group of consecutive numbers [ [ 40, 39, 38 ], [ 50, 49, 48 ], [ 70 ], [ 20 ] ]
时间和空间复杂度
输入数组的长度n决定了函数“find3IncreasingNum()”的执行时间。这是因为它使用for循环遍历整个数组一次。对于数组中的每个元素,还会执行固定数量的操作。
该函数占用O(1)空间。这种复杂度是由这样一个事实造成的:无论输入数组的大小如何,该函数都消耗固定数量的额外空间。为了跟踪数组的组件,它只是构造first、second和current变量。
因此,代码的空间复杂度是常数,而时间复杂度是线性。
结论
我们可以看到这个问题有多么简单。为了处理任何困难,我们将不得不进行逻辑思考并遵循某些步骤。我们已经看到了三种不同的输出,使用了不同的输入数组。时间复杂度和空间复杂度是用来评估算法效率的两个指标。