算法练习---力扣1779: 找到最近的有相同 X 或 Y 坐标的点

如果对你有用的话, 麻烦点个赞, 感激不尽

目录

一. 问题描述

二. 问题分析

三. 关键点

四. 代码实现及解释


一. 问题描述

        力扣链接: 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]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值