題目來源:《算法競賽進階指南》
時間限制:1000ms 內存限制:64mbjava
在一條數軸上有 N 家商店,它們的座標分別爲 A1~AN。
如今須要在數軸上創建一家貨倉,天天清晨,從貨倉到每家商店都要運送一車商品。
爲了提升效率,求把貨倉建在何處,能夠使得貨倉到每家商店的距離之和最小。算法
第一行輸入整數N。
第二行N個整數A1~AN。shell
輸出一個整數,表示距離之和的最小值。數組
1 ≤ N ≤ 100000
0 ≤ Ai ≤ 40000code
4 6 2 9 1
12
在數軸上選一個點,到其餘點距離最短,必定是中位數的點到其餘點最短。
當中位數有2個時,任意取一個便可。
所以,直接將輸入的數組排序,而後取中位數(排序後下標爲(n-1/2)的數),再算出距離便可。排序
import java.util.*; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int n = input.nextInt(); int[] a = new int[n]; for (int i = 0; i < n; i++) { a[i] = input.nextInt(); } input.close(); Arrays.sort(a); int mid = (n - 1) / 2; int sum = 0; for (int i = 0; i < n; i++) { sum += Math.abs((a[mid] - a[i])); } System.out.println(sum); } }