C++ 中陣列元素的最小絕對差之和?
本程式旨在找到給定陣列的最小絕對差之和,假設我們有一個包含不同元素的陣列。為了更好地理解這個概念,讓我們複習一下所需的內容:
陣列是一個儲存相同資料型別元素的容器。陣列的長度需要預先定義。
絕對差是兩個數字之間差的絕對值,即差值始終為正,負值將轉換為正值。
需要找到每個元素的最小絕對差之和,最小絕對差公式為
最小絕對差 (a) = min(abs(a – arr[j]));
其中 1 <= j <= n 且 j != i,abs 表示絕對值。
Input: arr = {1, 3, 9, 3, 6} Output: 8
解釋
最優解是選擇 x = 3,它產生的和為
|1 – 3| + |3 – 3| + |9 – 3| + |3 – 3| = 2 + 0 + 6 + 0 = 8
演算法
給定的輸入陣列已排序。
陣列的第一個元素的最小絕對差,使用第二個陣列元素計算。
陣列的最後一個元素的最小絕對差,也使用倒數第二個陣列元素計算。
,位於索引 i 的其他陣列元素的最小絕對差透過以下方式計算:
minAbsDiff = min( abs(arr[i] – arr[i-1]), abs(ar[i] – arr[i+1]) )。
示例
#include<iostream> #include <algorithm> using namespace std; int abs_sum(int a[], int len); int main() { int a[]={1, 3, 9, 3, 6}; int n, i; n=5; sort(a, a+n); int sum = 0; sum += abs(a[0]- a[1]); sum += abs(a[n-1]-a[n-2]); for (int i = 1; i < n-1; i++) { sum += min(abs(a[i]-a[i-1]), abs(a[i]-a[i+1])); } cout<<"The element with minimum sum of absolute differences is : "<<sum; return 0; }
輸出
The element with minimum sum of absolute differences is : 8
廣告