如果对你有用的话, 麻烦点个赞, 感激不尽
目录
一. 问题描述
力扣链接: 1779. 找到最近的有相同 X 或 Y 坐标的点
给定一个坐标A(x,y), 和一组坐标, 要求找到离A最近(曼哈顿距离)的有效点的下标, 如果有多个有效点, 返回列表中下标最小的那个点的下标.
有效点: 存在一个点B, 他的x等于A的x值, 或者他的y等于等于A的y值, B就是A的有效点.
曼哈顿距离: A到B的曼哈顿距离 = |Ax - Bx| + |Ay - By|
二. 问题分析
1. 要找距离最近, 首先要计算出来距离.
2. 找到最近距离, 那就要遍历完所有数组才能确定.
3. 可以定义一个变量来存储 距离(d), 如果下一个距离比这个小, 那就将d换成当前距离.
4. 但是题目要求返回的是距离最近的点的下标, 那就需要另一个变量来存储最小距离对应的下标.
5. 此外要求多个最短距离时, 要返回下标最小的, 那就按列表顺序遍历即可.
三. 关键点
1. 按列表顺序遍历
2. 记录最小距离和其下标
四. 代码实现及解释
def nearestValidPoint(self, x: int, y: int, points: List[List[int]]) -> int:
min_d = [float("inf"), -1] # float("inf") 表示是正无穷, 也可以导入 math包, 使用math.inf
for idx, p in enumerate(points):
distance = abs(p[0]-x) + abs(p[1]-y)
if distance < min_d[0] and (abs(p[0]-x)==0 or abs(p[1]-y)==0):
# abs(p[0]-x) 和 abs(p[1]-y) 有一个等于0, 那就是有效点
min_d[0] = distance
min_d[1] = idx
return min_d[1]