JavaScript 中最大递减相邻元素


给定的问题陈述要求我们借助 JavaScript 功能找出最大递减相邻元素。这个问题可以用 JavaScript 中一个简单的算法来解决。

理解逻辑

更详细地解释问题陈述的逻辑。

问题要求我们获取数组中最大数量的递减相邻项,或者可以说我们必须在输入数组中找到最长的递减子数组。

因此,为了解决这个问题,我们需要遍历整个数组,一次处理一个元素,并使用名为 count 的变量跟踪当前递减最近元素的计数。因此,我们将遇到一组递减的相邻元素。然后我们将增加计数。

否则,相邻元素不是递减顺序,因此我们将检查当前计数是否大于当前 maxCount(最初设置为 0)。如果此条件为真,我们将 maxCount 更新为当前计数。然后我们将计数重置为 0。因为我们已经找到了一组非递减的项目,并且当前递减相邻元素的子数组将结束。

算法

步骤 1:在算法开始时,我们将定义一个名为“maxDecreasingAdjacent”的函数。此函数将查找数组中元素的递减相邻元素。

步骤 2:然后函数将通过初始化两个计数变量(名为 maxCount 和 count)开始。这两个变量都已初始化为 0。

步骤 3:现在转到第二步,我们将初始化一个 for 循环来迭代输入数组中存在的所有项目。为了跟踪元素,我们在步骤 2 中已经定义了计数变量。

步骤 4:在这个阶段,每当我们遇到两个递减的相邻组件时,我们都会增加计数。当我们遇到两个不相邻的元素时,我们会确定当前计数是否超过当前 maxCount。

步骤 5:如果是,我们将调整 maxCount 以反映最新的计数。由于我们接触到一对非递减的相邻元素,因此当前递减相邻元素的子数组已终止,因此我们将计数重置为 0。

步骤 6:在最后一步,我们将从数组中获取递减相邻元素的结果。

示例

// function to find decreasing adjacent
function maxDecreasingAdjacent(arr) {
    // object to store the decreasing adjacent
    let maxCount = 0;
    let count = 0;
    // initialize a loop till the length of array
    for (let i = 1; i < arr.length; i++) {
      if (arr[i] < arr[i-1]) {
        count++;
      } else {
        if (count > maxCount) {
          maxCount = count;
        }
        count = 0;
      }
    }
    if (count > maxCount) {
      maxCount = count;
    }
    return maxCount;
  }
 
  //define two different arrays
  const array1 = [5, 4, 3, 2, 1];
  const array2 = [1, 2, 3, 4, 5];
  const adjacent1 = maxDecreasingAdjacent(array1);
  const adjacent2 = maxDecreasingAdjacent(array2);
  //print the output
  console.log(`For ${array1} the decreasing adjacent is ${adjacent1}`);
  console.log(`For ${array2} the decreasing adjacent is ${adjacent2}`);

输出

For 5,4,3,2,1 the decreasing adjacent is 4
For 1,2,3,4,5 the decreasing adjacent is 0

上述算法采用两种数组,一种是 array1,另一种是 array2。函数 maxDecreasingAdjacent 中的输入数组是整数数组。对于该输入数组,我们需要找到最大数量的递减相邻元素。该函数返回数组中最长递减子数组的长度。

输出显示了问题,如果输入数组为 [5, 4, 3, 2, 1],则函数返回结果 4,因为数组中有 4 个递减相邻项。在第二个数组 [1, 2, 3, 4, 5] 中,函数返回 0 作为输出,因为其中没有递减元素。如果输入数组为 [5, 4, 3, 2, 1, 3, 2, 1],则函数将再次返回 4,因为最长的递减子数组是 [5, 4, 3, 2]。

时间复杂度

时间和空间复杂度是我们用来判断算法效率的两个指标。在上面的代码中,我们发现复杂度为 O(n)。因为它恰好只考虑数组中每个递减相邻项的子数组一次,并跟踪所见最长子数组的长度,因此此技术是有效的。该算法只需要遍历数组一次,因此其时间复杂度为 O(n)。

结论

这就是我们如何解决上述问题陈述中提出的问题。确定数组的递减相邻元素的最简单和最准确的方法。我们可以使用简单的 O(n) JavaScript 算法来计算数组中最大数量的递减相邻成员。

更新于:2023年8月23日

143 次查看

开启你的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.