- 每日一题 789.逃脱阻碍者
题目要求是参数数组
ghosts[][]
中的每一项都比逃脱者[0,0]
不晚到达目的地target[]
时输出false
,否则输出true
。
我的第一想法是将ghosts[][]
中的每一项到target[]
的距离s
与[0,0]
到target[]
的距离s2
相比较。这样可以以target[]
为圆心,s2
为半径作圆,如果圆内包含边上存在点t
属于ghosts[][]
则输出false
,否则输出true
。
思考过后这个想法有些crazy,实现过于复杂。(用勾股定理求直线距离也比较复杂)
查找资料时发现两点之间有一个曼哈顿距离,曼哈顿距离可以快速计算比较,下面是实现代码。
var escapeGhosts = function(ghosts, target) {
var md = Math.abs(target[0]) + Math.abs(target[1]) // Math.abs()求绝对值
for (let ghost of ghosts) {
let md2 = Math.abs(ghost[0] - target[0]) + Math.abs(ghost[1] - target[1])
if (md2 <= md) {
return false
}
}
return true
}