在 JavaScript 中根据当前元素和前一个元素之间的差异对已排序数组进行分组

javascriptweb developmentfront end technologyobject oriented programming更新于 2024/12/9 4:28:17

在给定的问题陈述中,我们必须借助 JavaScript 功能根据当前元素和前一个元素之间的差异对已排序数组进行分组。要根据当前项和前一个项之间的差异对已排序数组进行分组,我们可以遍历该数组并创建一个新的组数组。

理解问题陈述

上述问题陈述指出,我们必须根据数组中当前元素和前一个元素之间的差异找出元素组。由于我们给出了一个已排序数组,因此我们需要根据每个元素与其前一个元素之间的差异对其元素进行分组。简单来说,只要连续元素之间的差异大于 1,我们就必须创建一个新组。输出应为一个组数组,其中每个组包含连续元素之间的差异为 1 或更小的元素。

例如,假设我们有一个数组 [1, 2, 3, 5, 7, 9],所以我们将创建的函数应给出 [ [ 1, 2, 3 ], [ 5, 7, 9 ] ] 的输出。在这里我们可以看到 1 和 2 之间的差异是 1,同样 2 和 3 之间的差异也是 1。因此,记住相同的差异,我们将它们分组为 [1, 2, 3]。

算法

步骤 1:为了解决根据当前元素和前一个元素之间的差异对排序数组进行分组的给定问题,我们必须创建一个空数组来存储组。

步骤 2:我们将使用一个变量来跟踪当前组。

步骤 3:迭代排序数组的元素,对于每个项目,我们将计算当前项目和前一个项目之间的差异。

步骤 4:如果差异大于 1,则创建一个新组并将当前项目包含在现有组中。

示例

//通过差异获取组数组的函数
function groupByDiff(arr) {
    //检查提供的数组是否为空
    if (arr.length === 0) {
        return [];
    }
    //初始化一个变量来存储结果
   const result = [];
   let currGroup = [arr[0]];

   for (let i = 1; i < arr.length; i++) {
      const diff = arr[i] - arr[i - 1];

      if (diff <= 1) {
         currGroup.push(arr[i]);
      } else {
         result.push(currGroup);
         currGroup = [arr[i]];
      }
   }

   result.push(currGroup);

   return result;
}

const sortedArray = [1, 2, 3, 5, 7, 9, 10, 14, 16, 17, 20, 21, 23];
const groupedArray = groupByDiff(sortedArray);

console.log(groupedArray);

输出

[
    [ 1, 2, 3 ], [ 5 ],
    [ 7 ],       [ 9, 10 ],
    [ 14 ],      [ 16, 17 ],
    [ 20, 21 ],  [ 23 ]
]

复杂度

所提供代码的时间复杂度为 O(n)。这里 n 是数组中元素的数量。这种复杂性的原因是函数遍历数组一次并对每个元素执行常量时间操作。

在最坏情况下,代码的空间复杂度为 O(m)。因为输入数组中的所有元素的差值都大于 1,并且每个元素都在一个单独的组中,因此 m 等于输入数组的大小。如果元素之间的差异通常较小,则组数将较小。这里 m 是结果数组中的组数。

结论

总之,代码根据连续元素之间的差异有效地对排序数组进行分组。对数组进行一次迭代,只要元素之间的差异大于 1,就会创建组。代码提供了正确的元素分组,具有线性时间复杂度,使代码有效。


相关文章


有用资源