JavaScript 两组大小为两个元素的最大差异

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:使用sort函数

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

示例

使用sort函数找到两个组之间的最大差异的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)。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程