NG SWE · Super Day VO2 Coding Discussion

Bloomberg Alien Defense:选炮塔位置覆盖最多房屋

二维网格一座炮塔、曼哈顿距离 k 覆盖 house;穷举合法位置和房屋计数,再讨论批量加速。

题目重点:二维网格一座炮塔、曼哈顿距离 k 覆盖 house;穷举合法位置和房屋计数,再讨论批量加速。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练版只在空地格放炮塔,房屋不能放塔,保护条件为 |r−hr|+|c−hc|≤k,墙不遮挡。
  • 若允许任意坐标/房屋格或存在遮挡,候选集合与距离定义都需改变。

解题路线

  1. 先收集所有 house 坐标与可放塔格;对每个候选位置统计距离≤k 的 house 数,取最大并保持稳定并列规则。
  2. 计算距离无需 BFS,因为题目明说 Manhattan 范围;若墙会遮挡则改为多源/逐塔最短路,并确认距离是否可绕墙。
  3. 若网格很大,可在旋转坐标 u=r+c、v=r−c 中把曼哈顿菱形变轴对齐正方形,使用二维前缀和/离线计数;但需处理坐标范围和稀疏内存。
  4. 空房屋、k=0、k 大于网格直径、无可放位置、多个最优位置分别测试。

手动走一遍

训练房屋在 (0,0)、(0,2)、(2,0),k=1,若 (0,1) 可放塔则覆盖前两栋;(1,0) 也覆盖两栋,并列按行列序选 (0,1)。这个例子是训练构造。

规模与取舍

P 个候选格、H 栋房屋的直接法 O(PH) 时间、O(P+H) 坐标空间;稠密旋转前缀可预处理后近 O(P+RC) 查询,但坐标域可能扩大。

易错点与追问

容易失分的边界

  • 用欧氏半径替代曼哈顿。
  • 假定墙会挡住保护却无题面依据。
  • 没问可否在 house 上放炮塔。
  • 只找房屋中心而漏空地最优点。

继续深挖

  • 允许放多座炮塔如何避免重复覆盖?
  • 房屋动态增删怎么维护?
  • 障碍遮挡如何改变解法?
✓已复制微信号!