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