首頁 > 後端開發 > C++ > 透過將陣列元素減少和增加 1 來最小化最大元素和最小元素之間的差異

透過將陣列元素減少和增加 1 來最小化最大元素和最小元素之間的差異

PHPz
發布: 2023-09-10 10:37:02
轉載
684 人瀏覽過

通过将数组元素减少和增加 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 <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
登入後複製
登入後複製

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 <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
登入後複製
登入後複製

Explanation

的中文翻譯為:

解釋

為了最大限度地減少數組中最大值和最小值之間的差異,可以採用方法 2 - 通常稱為排序。遵循此方法需要先按升序組織集合中的每個元素。接下來,開始同時遍歷所述集合的任一端,同時增加較小的元素,同時減少較大的元素,直到到達中點。這將使最大值和最小值更加接近,以實現所述參數之間更好的空間一致性,根據它們各自的大小,以高精度測量操作後任何新發現的差異。

結論

我們本文的目標是討論一種演算法驅動的方法,該方法側重於透過優先考慮範圍內較小的單位來減少範圍的最高值和最低值之間的差異。在我們的探索中,我們提出了兩種不同的策略:樸素策略和排序策略,並為讀者提供了現實生活中的用例,說明如何使用功能範例程式碼最好地應用這兩種策略,但不限於此。透過利用這些策略,我們可以有效地管理數組中的元素數量,從而達到最佳的價值平衡。在實施時,請記住,在執行不同的配置時,針對特定專案目標的客製化是關鍵

以上是透過將陣列元素減少和增加 1 來最小化最大元素和最小元素之間的差異的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板