算法分析
-
1、把
A[0]~A[N-1]
排序,设货仓在X
坐标处,X
左侧的商店有P
家,右侧的商店有Q
家。若P < Q
,则每把仓库的选址向右移动1单位距离,距离之和就会变少Q - P
.同理,若P > Q
,则仓库的选址向左移动会使距离之和变小。当P==Q
时为最优解。 -
2、因此仓库应该建在中位数处,把A进行排序,
-
当N为奇数时,货仓建在
A[(N - 1)/2]
处, -
当N为偶数时,仓库建在
A[(N - 1)/2 + 1]
处。
-
如下图举例:
时间复杂度(O(nlog(n)))
参考文献
Java 代码
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[] A = new int[n];
for(int i = 0;i < n;i++) A[i] = scan.nextInt();
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);
}
}
偶数的时候既然可以选择中间的数偏右边的·,为什么偏左边就不可以了,答案还过不了
同问
特判一下还是可以过的吧
偶数的时候,偏左或者偏右都行,只要 P==Q 就是最优解
呆呆大神真的强
写得太好了
通俗易懂!!
厉害厉害
详解写的好!
qwq