2021寒假每日一題《貨艙選址》

貨艙選址

題目來源:《算法競賽進階指南》
時間限制:1000ms 內存限制:64mbjava

題目描述

在一條數軸上有 N 家商店,它們的座標分別爲 A1~AN
如今須要在數軸上創建一家貨倉,天天清晨,從貨倉到每家商店都要運送一車商品。
爲了提升效率,求把貨倉建在何處,能夠使得貨倉到每家商店的距離之和最小。算法

輸入格式

第一行輸入整數N。
第二行N個整數A1~ANshell

輸出格式

輸出一個整數,表示距離之和的最小值。數組

數據範圍

1 ≤ N ≤ 100000
0 ≤ Ai ≤ 40000code

樣例輸入

4
6 2 9 1

樣例輸出

12

解題思路

在數軸上選一個點,到其餘點距離最短,必定是中位數的點到其餘點最短。
當中位數有2個時,任意取一個便可。
所以,直接將輸入的數組排序,而後取中位數(排序後下標爲(n-1/2)的數),再算出距離便可。排序

解題代碼-Java

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);
    }
}
相關文章
相關標籤/搜索