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 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.