1779. 找到最近的有相同 X 或 Y 坐标的点
找到最近的有相同 X 或 Y 坐标的点
给定坐标(x, y)和一个数组 points ,其中 points[i] = [ai, bi] 表示在 (ai, bi) 处有一个点。当一个点与你所在的位置有相同的 x 坐标或者相同的 y 坐标时,我们称这个点是 有效的 。
请返回距离你当前位置 曼哈顿距离最近的有效点的下标(下标从 0 开始)。如果有多个最近的有效点,请返回下标最小的一个。如果没有有效点,请返回 **-1 **。
两个点 (x1, y1) 和 (x2, y2) 之间的 曼哈顿距离 为 abs(x1 - x2) + abs(y1 - y2) 。
- 思路:通过哈希 + 后序遍历,实现返回下标最小的距离最近的有效点
- 代码
def nearestValidPoint(self, x: int, y: int, points: List[List[int]]) -> int:
# 定义有效点哈希表
v_points = {}
# 初始化最近距离为正无穷
min_dis = float('inf')
ans = -1
# 后序遍历
i = len(points)-1
while i >= 0:
x1, y1 = points[i]
if (x==x1) or (y==y1):
# 将有效点的 距离(key) 序号(value) 存入哈希表
v_points[abs(x1-x)+abs(y1-y)]=i
i -= 1
# 找到哈希表中距离最小的点的index
# 由于是后序遍历,故表内所有点均为该距离下 序号最小 的点
for dis in v_points.keys():
if dis < min_dis:
ans = v_points.get(dis)
min_dis = dis
return ans
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-nearest-point-that-has-the-same-x-or-y-coordinate
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

浙公网安备 33010602011771号