You are playing a simplified Pacman game. You start at the point (0, 0), and your destination is (target[0], target[1]). There are several ghosts on the map, the i-th ghost starts at (ghosts[i][0], ghosts[i][1]).

Each turn, you and all ghosts simultaneously *may* move in one of 4 cardinal directions: north, east, west, or south, going from the previous point to a new point 1 unit of distance away.

You escape if and only if you can reach the target before any ghost reaches you (for any given moves the ghosts may take.)  If you reach any square (including the target) at the same time as a ghost, it doesn't count as an escape.

Return True if and only if it is possible to escape.

Example 1:
Input:
ghosts = [[1, 0], [0, 3]]
target = [0, 1]
Output: true
Explanation:
You can directly reach the destination (0, 1) at time 1, while the ghosts located at (1, 0) or (0, 3) have no way to catch up with you.
Example 2:
Input:
ghosts = [[1, 0]]
target = [2, 0]
Output: false
Explanation:
You need to reach the destination (2, 0), but the ghost at (1, 0) lies between you and the destination.
Example 3:
Input:
ghosts = [[2, 0]]
target = [1, 0]
Output: false
Explanation:
The ghost can reach the target at the same time as you.

Note:

  • All points have coordinates with absolute value <= 10000.
  • The number of ghosts will not exceed 100.

Approach #1: Math. [Java]

class Solution {
public boolean escapeGhosts(int[][] ghosts, int[] target) {
int max = Math.abs(target[0]) + Math.abs(target[1]);
for (int[] ghost : ghosts) {
int dis = Math.abs(ghost[0] - target[0]) + Math.abs(ghost[1] - target[1]);
if (dis <= max) return false;
} return true;
}
}

  

Analysis:

The best tactic for any ghost is to reach the target before pacman and block the exit.

Note that we do not require that any ghost reaches pacman (which will never happen on an infinite grid for a single ghos and be much harder to determine for multiple ghost).

We only require that pacman can or cannot reach the target with optimal ghost strategy.

If any ghost has the same or lower distance to the target, then is can get there first and wait. Pacman cannot reach the target, although he would not necessarily be killed by a ghost.

If pacman is closer to the target than any ghost, he goes there along the most direct path.

Since we are working on a 2D grid, distances are measured as Manhattan distance.

Reference:

https://leetcode.com/problems/escape-the-ghosts/discuss/116511/Short-with-explanation-python

最新文章

  1. 使用Hexo搭建专属Blog
  2. android system.img
  3. cocos2d-x之action初试
  4. (6)s3c2440用I2C接口访问EEPROM
  5. NET设计模式(2):单件模式(Singleton Pattern)[转载]
  6. Eclipse formater(google Java 编码规范)
  7. Android 弹出窗体
  8. iOS - 单例传值 (一)
  9. js深入理解构造函数和原型对象
  10. 【Android Developers Training】 66. 添加动画
  11. linux:如何指定进程运行的CPU
  12. Android进阶(十九)AndroidAPP开发问题汇总(三)
  13. luogu P3722 [AH2017/HNOI2017]影魔
  14. mongoose update操作属性中的变量
  15. Mad Libs游戏1
  16. 利用spring boot构建一个简单的web工程
  17. [LeetCode&amp;Python] Problem 104. Maximum Depth of Binary Tree
  18. SQL中的go、begin、end的用法
  19. python类型学习
  20. 【Java面试题】10 abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

热门文章

  1. Pandas初体验
  2. c++指针数组与二维数组的最大区别
  3. rest framework Genericview
  4. CMDB项目要点总结之中控机
  5. org.springframework.web.util.IntrospectorCleanupListener作用
  6. 【odoo14】第六章、管理模块数据
  7. NET 5.0 Swagger API 自动生成MarkDown文档
  8. Xshell(远程)连接不上linux服务器(防火墙介绍)
  9. MySQL中where和on,where和having 的区别
  10. 白话解读 WebRTC 音频 NetEQ 及优化实践