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

更新於: 2019年10月4日

312 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告