思路
中位数就是最优解
sort()方法:Sort(start,end,cmp)
(1)start表示要排序数组的起始地址;
(2)end表示数组结束地址的下一位;
(3)cmp用于规定排序的方法,可不填,默认升序。
abs()方法:求绝对值
C++ 代码
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 100010;
int n;
int a[N];
int main()
{
cin >> n;
for(int i = 0; i < n; i ++) cin >> a[i];
sort(a,a+n);
int res;
for(int i = 0; i < n; i ++) res +=abs(a[i]-a[n/2]) ;
cout << res <<endl;
}
nth_element(a,a+n/2,a+n)
另一种写法:for(int i = 0; i < n; i ++) res +=abs(a[i]-a[i/2]) ;
求中位数nth_element
二维三维四维等可以用三分方法做。十维用模拟退火方法
类似题型3167. 星星还是树