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

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

对于 C++ 编码人员来说,减少数组中最大和最小元素数量之间的差距可能很有用。这促进了价值在其所有元素中的均匀分散,可能在多种情况下带来多种好处。我们目前的重点是通过实用技术增加或减少阵列结构的大小来实现优化阵列结构内平衡的方法。

语法

在深入研究算法的细节之前,让我们首先简要检查说明性代码示例中使用的方法的语法 –

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

minimumDifference 函数采用数组 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 #include 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

Explanation

的中文翻译为:

解释

天真的方法 – 也称为方法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 #include 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

Explanation

的中文翻译为:

解释

为了最大限度地减少数组中最大值和最小值之间的差异,可以采用方法 2 – 通常称为排序。遵循此方法需要首先按升序组织集合中的每个元素。接下来,开始同时遍历所述集合的任一端,同时增加较小的元素,同时减少较大的元素,直到到达中点。这将使最大值和最小值更加接近,以实现所述参数之间更好的空间一致性,根据它们各自的大小,以高精度测量操作后任何新发现的差异。

结论

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

以上就是通过将数组元素减少和增加 1 来最小化最大元素和最小元素之间的差异的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1444824.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 21:55:26
下一篇 2025年12月14日 04:38:28

相关推荐

  • 列表中的所有回文数字是什么?

    在这里我们将看到一个简单的问题。我们必须在给定列表中找到本质上是回文的所有数字。方法很简单,从列表中取出每个数字并检查它是否是回文,然后打印该数字。 算法 getAllPalindrome(arr, n) Begin for each element e in arr, do if e is pal…

    2025年12月17日
    000
  • 在C/C++中,strcmp()函数用于比较两个字符串

    The function strcmp() is a built-in library function and it is declared in “string.h” header file. This function is used to compare the string argumen…

    2025年12月17日
    000
  • 检查给定的数组是否可以通过将元素减半来构成1到N的排列

    我们的目的是确定对数组中包含的每个项目执行多次除法是否会创建一个从 1 到 N 的没有任何重复项的整数列表。这项努力的成功将意味着我们的调查目标圆满实现。本质上,确定将给定数组中提供的所有元素切割两个是否会产生完全由 1 到 N 之间的非重复值组成的排列,这是我们工作的主要焦点。确认后,评估我们的论…

    2025年12月17日
    000
  • 双指针(指向指针)在C语言中

    指针用于存储变量的地址。因此,当我们定义一个指针到指针时,第一个指针用于存储第二个指针的地址。因此它被称为双指针。 算法 Begin Declare v of the integer datatype. Initialize v = 76. Declare a pointer p1 of the i…

    2025年12月17日
    000
  • 中点线生成算法的C++实现

    一条线连接两点。它是图形中的基本元素。要绘制一条线,您需要两个点,您可以在屏幕上在这两个点之间绘制一条线,就图形而言,我们将这些点称为像素,每个像素都与整数坐标相关联。我们以 (x1, y1) 和 (x2, y2) 的形式给出整数坐标,其中 x1 正在使用三种不同的算法用于在屏幕上执行线生成,这些是…

    2025年12月17日
    000
  • 如何在C/C++中封装Python对象?

    我们可以使用Boost Python库将Python对象封装在C/C++中。  Boost Python库 Boost Python库是一个用于接口Python和C++的框架。它允许您快速无缝地将C++类、函数和对象暴露给Python,反之亦然,而无需使用任何特殊工具 – 只需使用您的C…

    2025年12月17日
    000
  • 回文自拍数

    如果一个数字可以仅使用其自己的数字和某些数学运算来表示,则该数字被视为“自拍数字”。 例如,936是一个自拍号码。 $$mathrm{936:=:(sqrt{9})!^{3}:+:6!:=:216:+:720:=:第936章 这里可以看到,对原数的数字进行了一系列运算,结果与原数相等。 回文自拍号码…

    2025年12月17日
    000
  • 在C程序中,将数组范围查询与频率相同的元素进行翻译

    这里我们会看到一个有趣的问题。我们有一个包含 N 个元素的数组。我们必须执行一个查询 Q,如下所示: Q(start, end) 表示从开始到结束,数字“p”出现的次数恰好是“p”次。 p> 因此,如果数组类似于:{1, 5, 2, 3, 1, 3, 5, 7, 3, 9, 8},并且查询为 …

    2025年12月17日
    000
  • 在C/C++中,long long是一种数据类型,用于表示更大范围的整数。它通常占据8个字节的存储空间,并可以表示的整数范围更大,比普通的long类型更长

    在某些情况下,我们在C或C++中使用long long。在这里,我们将看到long long基本上是什么?long long占用的内存空间是long的两倍。在不同的系统中,分配的内存空间不同。在Linux环境中,long占用64位(8字节)的空间,而long long占用128位(16字节)的空间。…

    2025年12月17日
    000
  • ASCII NUL,ASCII 0(’0’)和数字字面值0?

    这里我们将看到 ASCII NUL、ASCII 0 和 Numeric Literal 0。ASCII null 表示为 0x00,零表示为 0x30。 ASCII NUL 字符用于在 C 或 C++ 中表示字符串的结尾。当程序员使用“0”(字符 0)时,它被视为 0x30。这是一个十六进制数。十进…

    2025年12月17日
    000
  • 打印n个数字,使它们的和是一个完全平方数

    给定n个数字,程序必须找到这n个数字的和为一个完全平方数 Input : 5Output : 1 3 5 7 91+3+5+7+9=25 i.e (5)^2 算法 START Step 1 : Declare a Macro for size let’s say of 5 and i t…

    2025年12月17日
    000
  • 在C语言中,八进制字面量

    在 C/C++ 中,我们可以通过在实际数字前键入零来使用八进制文字。例如,如果八进制数是 25,那么我们必须编写 025。 示例代码 #include int main() { int a = 025; int b = 063; printf(“Decimal of 25(Octal) is %d”…

    2025年12月17日
    000
  • 找到C++中修改后数组的最小值的最大可能值

    在这个问题中,我们给定一个大小为 n 的数组 arr[] 和一个数字 S。我们的任务是找到修改后的数组的最小值的最大可能值。 p> 这里是修改数组的规则, 修改前后数组元素之和应为S。 修改后的数组中不允许有负值。 如果修改后的数组,需要数组的最小值最大化。 立即学习“C++免费学习笔记(深入…

    2025年12月17日
    000
  • 使用一个循环打印图案的C程序

    挑战是仅使用一个循环和 continue 语句来显示模式。 算法 STARTStep 1 -> declare start variables i and j to 0 with number of rows in n to 6Step 2 -> Loop For i=1 and i&l…

    2025年12月17日
    000
  • C++程序从两个数组中查找公共元素

    使用数组和数据结构可以在多个内存位置上存储同质(相同)数据。使用数组的主要优点是我们可以通过使用索引参数从任何地方访问它们。数据必须按顺序添加和删除的事实将这种数据结构转化为线性结构。要从数组中检索元素,我们只需要使用方括号内的索引或位置号码。在本文中,我们将使用C++获取两个数组中仅存在的共同元素…

    2025年12月17日
    000
  • 递归解码一个以计数后跟子字符串编码的字符串

    在这个问题中,我们需要通过重复添加总计数次数来解码给定的字符串。 我们可以采用三种不同的方法来解决问题,并且可以使用两个堆栈或一个堆栈来解决问题。另外,我们可以在不使用两个堆栈的情况下解决问题。 问题陈述 – 我们给出了一个字符串 str ,其中包含左括号和右括号、字母和数字字符。我们需…

    2025年12月17日
    000
  • 计算将字符串分割为以偶数开头且最小长度为M的K个子字符串的方法数

    在这个问题中,我们将计算将给定的字符串划分为K个子字符串的方法,使其满足问题陈述中给出的条件。 我们将使用递归来解决这个问题。此外,我们还将使用表格动态规划方法来高效解决这个问题。 问题陈述 − 我们有一个名为bin_Str的特定长度的字符串。该字符串只包含从’0’到&#82…

    2025年12月17日
    000
  • 将字符重新排列以形成回文(如果可能)在C++中

    我们被给定一个长度为任意给定长度的字符串’str’。任务是重新排列字符,使输出成为一个回文字符串,而不添加或删除给定输入字符串中的字符。回文字符串是指字符以一种方式排列,使得它们从开始到结束发音相同。 让我们看看这个的各种输入输出场景 – 输入 – 字…

    2025年12月17日
    000
  • C++程序查找法向量和迹

    二维数组或矩阵在多个应用中非常有用。矩阵有行和列,并在其中存储数字。在C++中,我们也可以使用多维数组来定义二维矩阵。在本文中,我们将看到如何使用C++计算给定矩阵的范数和迹。 法线是矩阵中所有元素总和的平方根。迹是主对角线中存在的元素的总和。让我们看看算法和 C++ 代码表示。 矩阵法线 $beg…

    2025年12月17日
    000
  • C++程序:将一个数组的所有元素复制到另一个数组中

    数组数据结构用于在连续的内存中存储同质数据位置以顺序方式访问它们。数组是线性数据结构,因此数组的基本操作可以在线性时间内执行。在本文中,我们将了解如何在 C++ 中将一个数组中的元素复制到另一个新数组。 由于数组元素是同类的,因此新数组将具有相同的类型。创建后另一个相同大小的数组,我们只需将第一个数…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信