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
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP