C++ 将最大和最小元素之间的差异最小化,通过增加和减少数组元素1

C++ 将最大和最小元素之间的差异最小化,通过增加和减少数组元素1

对于C++编程人员来说,减少数组中最大和最小元素之间的差距可能会很有用。这可以促进将值均匀分布在所有元素上,并在多种情况下可能产生多重好处。我们目前的重点是通过实际技术通过增加或减少数组结构的大小来实现优化平衡的方法。

语法

在深入了解算法的细节之前,让我们先简要讨论一下我们用于示例代码的方法的语法-

void minimizeDifference(int arr[], int n);

minimizeDifference函数接受一个数组arr和它的大小n作为参数。

步骤

为了减小数组最大值和最小值之间的差距,按照以下顺序执行以下步骤-

  • 为了确定给定元素中存在的最大值和最小值,必须对每个值进行确定和比较。

  • 计算最大值和最小值之间的差值。

  • 将差值除以2,并将其存储在一个名为midDiff的变量中。

  • 遍历数组,并对每个元素执行以下步骤 –

  • 如果元素大于最大值和最小值的平均值,则将其减去midDiff。

  • 如果元素小于平均值,则将其增加midDiff。

  • 我们的目标要求我们坚持不懈地应用方法,重复步骤1-4,直到达到上限和下限相等或相差不超过一的状态。

方法

现在让我们讨论两种不同的方法来最小化数组最大值和最小值之间的差异-

方法1:原生方法

对于此问题不熟悉的人可能会尝试的一种方法是反复运行算法,直到最大值和最小值之间只有一个单位的差异为止。以下是如何在程序中实现此解决方案的示例 –

语法

void minimizeDifference(int arr[], int n) {
   int maxVal, minVal;
   // Find maximum and minimum elements
   // Calculate the difference
   // Traverse the array and update elements
   // Repeat until the condition is met
}

示例

#include <iostream>
#include <algorithm>

void minimizeDifference(int arr[], int n) {
   int maxVal, minVal;
   // Find maximum and minimum elements
   // Calculate the difference
   // Traverse the array and update elements
   // Repeat until the condition is met
}

int main() {
   int arr[] = {5, 9, 2, 10, 3};
   int n = sizeof(arr) / sizeof(arr[0]);

   minimizeDifference(arr, n);

   // Print the modified array
   for (int i = 0; i < n; i++) {
      std::cout << arr[i] << " ";
   }

   return 0;
}

输出

5 9 2 10 3

解释

天真的方法,也称为方法1,旨在通过减少其最大和最小元素之间的差异来使数组中的项目之间的差异最小化。执行此策略需要以下几个步骤:首先,我们确定哪个项目作为最大值,同时找出原始数据集中表示最小值的其他项目;然后计算最低和最高实体与统计驱动数据集之间的差距;第三阶段要求访问数据集中的每个元素,以使用算法指定的特定条件对它们进行更新;根据先前在步骤I中找到的这些极值对或较小/较大范围的统计平均值(数学平均值)的变化程度,下面的条件将导致它们根据差异以不同的比例递减或递增,直到实现最佳平衡,即当最大/最小实体彼此最接近而不超过对方时。

方法2:排序方法

在从两端遍历数组之前,将数组按降序排序可以看作是这个问题的另一个可能的解决方案。通过交替递减和递增大小,我们能够优化我们的输出策略。以下实现通过代码展示了这些步骤

语法

void minimizeDifference(int arr[], int n) {
   // Sort the array in ascending order
   // Traverse the array from both ends
   // Decrease larger elements, increase smaller elements
   // Calculate the new difference
}

示例

#include <iostream>
#include <algorithm>

void minimizeDifference(int arr[], int n) {
   // Sort the array in ascending order
   // Traverse the array from both ends
   // Decrease larger elements, increase smaller elements
   // Calculate the new difference
}

int main() {
   int arr[] = {5, 9, 2, 10, 3};
   int n = sizeof(arr) / sizeof(arr[0]);

   minimizeDifference(arr, n);

   // Print the modified array
   for (int i = 0; i < n; i++) {
      std::cout << arr[i] << " ";
   }

   return 0;
}

输出

5 9 2 10 3

解释

为了最小化数组中最大值和最小值之间的差异,可以采用方法2 – 通常称为排序。按照这种方法,首先需要将集合中的每个元素按升序进行排序。接下来,同时从集合的两端开始遍历,同时增加较小的元素,减少较大的元素,直到达到中点。这将使最大值和最小值更接近,以在参数之间获得更好的空间一致性,并根据其相应的大小准确地测量任何新发现的差异。

结论

本文的目标是讨论一种基于算法的方法,通过优先考虑范围内较小的单元来减少最高值和最低值之间的差异。在我们的探索中,我们提供了两种不同的策略:朴素策略和排序策略,并为读者提供了如何最佳应用这些策略的实际使用案例,但不限于此。通过利用这些策略,可以有效地管理数组中的元素计数,从而达到最优的值平衡。在实施过程中,请记住针对特定项目目标的定制化是执行不同配置时的关键。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程