阿里笔试题取物资
题目
在一个二维地图上有很多军营,每个军营的坐标为(x,y),有一条平行于y轴且长度无限的路,补给车经过这条路时会将每个军营的物资放到离他们军营最近的路边(这条马路所在的位置使得所有军营到达马路的距离和最小),请问所有军营到马路的最短距离和是多少
样例
输入:
[[-10,0],[0,0],[10,0]]
输出:20
说明:假设路在x=0上,最短路径和为10+0+10=20
分析
这个题目实际上就是求x坐标的中位值
1.首先提取出x坐标的数组
2.找出中位数,这里使用快速排序算法
3.做差值
代码
import (
"math"
)
func quickSort(begin int,end int,arr []int){
if (begin - end == 1 || begin - end == 0) {
return
}
mark := begin
for i := (begin + 1); i < end; i++ {
if arr[i]<arr[mark] {
tmp := arr[i]
arr[i] = arr[mark + 1]
arr[mark + 1] = arr[mark]
arr[mark] = tmp
mark++
}
}
quickSort(begin, mark, arr);
quickSort(mark + 1, end, arr);
}
func Fetchsupplies(coordinates [][]int) int{
b := len(coordinates)
arr := make([]int, b)
for k, v:=range coordinates{
arr[k]=v[0]
}
quickSort(0,b,arr)
mid := arr[b/2]
var s float64
for _, v:=range arr{
s=s+(math.Abs(float64(v-mid)))
}
return int(s)
}