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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

posted @ 2022-03-25 10:13  ArdenWang  阅读(51)  评论(0)    收藏  举报