输入样例:
4
6 2 9 1
输出样例:
12
解题思路:
设仓库地址为C,N家商店在数轴上排列为A1~An。当数轴上只有两家时,仓库地址只要选在A1~A2的任意位置都可以保证仓库到两商店的距离最短,因为它们的距离都是A2-A1;当数轴上有四个商店时,仓库对于A2~A3的位置仍然需要在他们中间,因为仓库在A2~A2之外就会多走一段重复的路。
所以当有2n个商店时,仓库的位置可以为An~An+1 之间的任何位置;当有2n+1个商店时,仓库的位置在第An+1的位置可以使得距离最短。(从数轴上看的,所以需要有序)
Java代码:
import java.io.*;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int []arr = new int[n];
String[] split = br.readLine().split(" ");
for(int i = 0; i < n; i++)
arr[i] = Integer.parseInt(split[i]);
Arrays.sort(arr);
int mid = n / 2; // 可以举例证明,n为奇数或者偶数,mid都正好为中间值
long ans = 0;
for(int i = 0; i < n; i++) {
ans += Math.abs(arr[mid] - arr[i]);
}
System.out.println(ans);
}
}