JavaScript 找到数组中三个严格递增的数字(连续或非连续)

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的长度。

步骤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)的空间。这个复杂度是因为无论输入数组的大小如何,函数都会消耗固定数量的额外空间。为了跟踪数组的元素,它仅构造了第一个、第二个和当前变量。

因此,代码的空间复杂度是常数,而时间复杂度是线性的。

结论

我们可以看到这个问题是多么简单。为了处理任何困难,我们需要逻辑思维和按照一定的步骤进行。通过对不同的输入数组进行测试,我们可以得到三种不同的输出。时间复杂度和空间复杂度是评估算法效果的两个指标。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程