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变量。

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

结论

我们可以看到这个问题有多么简单。为了处理任何困难,我们将不得不进行逻辑思考并遵循某些步骤。我们已经看到了三种不同的输出,使用了不同的输入数组。时间复杂度和空间复杂度是用来评估算法效率的两个指标。

更新于:2023年8月23日

310 次浏览

开启您的职业生涯

完成课程获得认证

开始
广告