大小为二的组之间的最大差值的 JavaScript 程序


在这个程序中,我们得到一个偶数长度的整数数组,因为我们知道这里我们必须组成大小为二的组。我们必须从使用数组元素组成的这些组中,选择其中两个组,以便找到这两个组之间的最大差值,并且我们必须返回该最大差值,这将在下面的文章中看到。

问题介绍

在给定的问题中,我们必须找到大小为二的组之间的最大差值。这意味着我们得到了一个偶数长度的数组,并且我们必须组成大小为二的组。由于我们必须返回组之间的最大差值,因此我们必须找到一个和最大的组和一个和最小的组,并返回它们的差值。

示例 1

我们得到一个大小为 num 的数组,

Input:
Num = 4
Array = {5, 1, 6, 7}
Output: 7 

这里形成的组将是 {5,1} 和 {6,7},即分别为 6 和 13,并且和最大组与和最小组之间的差值为 13 - 6 等于 7。

示例 2

Input:
Num =  6
Array = {3, 1, 2, 4, 5, 6}
Output: 8

这里形成的组将是 {1,2},{3,4} 和 {5,6},即分别为 3、7 和 11,并且和最大组与和最小组之间的差值为 11 - 3 等于 8。

方法 1:暴力方法

在这种方法中,我们创建每种可能的组组合,并将每组组合中和最大组与和最小组之间的差值与其他组合进行比较。

总共有 n*(n-1)/2 种分组(nC2)。

时间复杂度:O(n^3),因为它需要 O(n^2) 来构造组,并且需要 O(n) 来检查每个组。

方法 2:使用排序函数

在这种方法中,我们首先使用排序函数对数组进行排序,因为我们知道我们需要两个组的和最大值和最小值,所以我们将排序数组的第一个和第二个值加起来得到最小和,并将排序数组的最后一个和倒数第二个值加起来得到最大和,然后返回这两个和的差值。现在让我们来看一个例子。

示例

使用排序函数查找两个组之间最大差值的 JavaScript 程序。

function calMaxDiff( array , num){
   //sorting an array using the sort function
   array.sort();
   let highestVal = array[num - 1] + array[num - 2];
   let lowestVal =  array[0] + array [1];
   return (Math.abs(highestVal - lowestVal));
}
let num = 6;
let array = [3, 1, 2, 4, 5, 6];
console.log("Maximum Difference: " + calMaxDiff( array, num ));

时间和空间复杂度

上面代码的时间复杂度为 O(NlogN),因为这里我们使用了排序函数。这里 N 是数组的大小。

上面代码的空间复杂度为 O(1)。

方法 3:通过查找两个最大值和两个最小值

在这种方法中,我们必须找到数组中的第一个和第二个最大值,并找到数组中的第一个和第二个最小值。

示例

查找两个组之间最大差值的 JavaScript 程序。

function calMaxDiff( array , num){
   let firstMin = Math.min.apply(Math,array);;
   let secondMin = Number.MAX_VALUE;
   for(let i = 0; i < num ; i ++) {
      // If array[i] is not equal to first min
      if (array[i] != firstMin)
         secondMin = Math.min(array[i],secondMin);
   }
   let firstMax = Math.max.apply(Math,array);;
   let secondMax = Number.MIN_VALUE;
   for (let i = 0; i < num ; i ++){
      // If array[i] is not equal to first max
      if (array[i] != firstMax)
         secondMax = Math.max( array[i], secondMax);
   }
   return Math.abs(firstMax+secondMax-firstMin-secondMin);
}
let num = 6;
let array = [3, 1, 2, 4, 5, 6];
console.log("Maximum Difference: " + calMaxDiff( array, num ));

时间和空间复杂度

上面代码的时间复杂度为 O(N),因为这里我们只遍历数组以查找最大值和最小值。这里 N 是数组的大小。

上面代码的空间复杂度为 O(1)。

结论

在本文中,我们讨论了查找大小为二的组之间的最大差值。这里我们讨论了三种解决问题的方法。第一种方法的时间复杂度为 O(N^3),接下来一种方法的时间复杂度为 O(N*log(N)),但最后一种方法的时间复杂度为 O(N)。

更新于:2023年4月14日

79 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告