|
| 1 | +/* |
| 2 | + * @lc app=leetcode.cn id=789 lang=golang |
| 3 | + * |
| 4 | + * [789] 逃脱阻碍者 |
| 5 | + * |
| 6 | + * https://leetcode.cn/problems/escape-the-ghosts/description/ |
| 7 | + * |
| 8 | + * algorithms |
| 9 | + * Medium (68.50%) |
| 10 | + * Likes: 115 |
| 11 | + * Dislikes: 0 |
| 12 | + * Total Accepted: 23.9K |
| 13 | + * Total Submissions: 34.8K |
| 14 | + * Testcase Example: '[[1,0],[0,3]]\n[0,1]' |
| 15 | + * |
| 16 | + * 你在进行一个简化版的吃豆人游戏。你从 [0, 0] 点开始出发,你的目的地是 target = [xtarget, ytarget] |
| 17 | + * 。地图上有一些阻碍者,以数组 ghosts 给出,第 i 个阻碍者从 ghosts[i] = [xi, yi] 出发。所有输入均为 整数坐标 。 |
| 18 | + * |
| 19 | + * 每一回合,你和阻碍者们可以同时向东,西,南,北四个方向移动,每次可以移动到距离原位置 1 个单位 的新位置。当然,也可以选择 不动 。所有动作 同时 |
| 20 | + * 发生。 |
| 21 | + * |
| 22 | + * 如果你可以在任何阻碍者抓住你 之前 到达目的地(阻碍者可以采取任意行动方式),则被视为逃脱成功。如果你和阻碍者 同时 到达了一个位置(包括目的地) |
| 23 | + * 都不算 是逃脱成功。 |
| 24 | + * |
| 25 | + * 如果不管阻碍者怎么移动都可以成功逃脱时,输出 true ;否则,输出 false 。 |
| 26 | + * |
| 27 | + * |
| 28 | + * 示例 1: |
| 29 | + * |
| 30 | + * |
| 31 | + * 输入:ghosts = [[1,0],[0,3]], target = [0,1] |
| 32 | + * 输出:true |
| 33 | + * 解释:你可以直接一步到达目的地 (0,1) ,在 (1, 0) 或者 (0, 3) 位置的阻碍者都不可能抓住你。 |
| 34 | + * |
| 35 | + * |
| 36 | + * 示例 2: |
| 37 | + * |
| 38 | + * |
| 39 | + * 输入:ghosts = [[1,0]], target = [2,0] |
| 40 | + * 输出:false |
| 41 | + * 解释:你需要走到位于 (2, 0) 的目的地,但是在 (1, 0) 的阻碍者位于你和目的地之间。 |
| 42 | + * |
| 43 | + * |
| 44 | + * 示例 3: |
| 45 | + * |
| 46 | + * |
| 47 | + * 输入:ghosts = [[2,0]], target = [1,0] |
| 48 | + * 输出:false |
| 49 | + * 解释:阻碍者可以和你同时达到目的地。 |
| 50 | + * |
| 51 | + * |
| 52 | + * |
| 53 | + * |
| 54 | + * 提示: |
| 55 | + * |
| 56 | + * |
| 57 | + * 1 <= ghosts.length <= 100 |
| 58 | + * ghosts[i].length == 2 |
| 59 | + * -10^4 <= xi, yi <= 10^4 |
| 60 | + * 同一位置可能有 多个阻碍者 。 |
| 61 | + * target.length == 2 |
| 62 | + * -10^4 <= xtarget, ytarget <= 10^4 |
| 63 | + * |
| 64 | + * |
| 65 | + */ |
| 66 | +package jzoffer |
| 67 | + |
| 68 | +// @lc code=start |
| 69 | +// 贪心,算距离,离得近的先到 |
| 70 | +func escapeGhosts(ghosts [][]int, target []int) bool { |
| 71 | + type pair struct { |
| 72 | + x, y int |
| 73 | + } |
| 74 | + abs := func(x int) int { |
| 75 | + if x < 0 { |
| 76 | + return -x |
| 77 | + } |
| 78 | + return x |
| 79 | + } |
| 80 | + distance := func(p pair) int { |
| 81 | + return abs(p.x-target[0]) + abs(p.y-target[1]) |
| 82 | + } |
| 83 | + x := distance(pair{0, 0}) |
| 84 | + for _, v := range ghosts { |
| 85 | + if distance(pair{v[0], v[1]}) <= x { |
| 86 | + return false |
| 87 | + } |
| 88 | + } |
| 89 | + return true |
| 90 | +} |
| 91 | + |
| 92 | +// @lc code=end |
0 commit comments