这是我参与更文挑战的第18天,活动详情查看: 更文挑战
描述
You are given two integers, x and y, which represent your current location on a Cartesian grid: (x, y). You are also given an array points where each points[i] = [ai, bi] represents that a point exists at (ai, bi). A point is valid if it shares the same x-coordinate or the same y-coordinate as your location.
Return the index (0-indexed) of the valid point with the smallest Manhattan distance from your current location. If there are multiple, return the valid point with the smallest index. If there are no valid points, return -1.
The Manhattan distance between two points (x1, y1) and (x2, y2) is abs(x1 - x2) + abs(y1 - y2).
Example 1:
Input: x = 3, y = 4, points = [[1,2],[3,1],[2,4],[2,3],[4,4]]
Output: 2
Explanation: Of all the points, only [3,1], [2,4] and [4,4] are valid. Of the valid points, [2,4] and [4,4] have the smallest Manhattan distance from your current location, with a distance of 1. [2,4] has the smallest index, so return 2.
Example 2:
Input: x = 3, y = 4, points = [[3,4]]
Output: 0
Explanation: The answer is allowed to be on the same location as your current location.
Example 3:
Input: x = 3, y = 4, points = [[2,3]]
Output: -1
Explanation: There are no valid points.
Note:
1 <= points.length <= 10^4
points[i].length == 2
1 <= x, y, ai, bi <= 10^4
解析
根据题意,在 points 中的某一个点的横坐标和 x 相等或者纵坐标和 y 相等,那这个点是合法的,然后找出这些合法的点和 (x,y) 的最小曼哈顿距离的最小的索引。思路简单,直接遍历所有的点进行判断即可获得答案。
解答
class Solution(object):
def nearestValidPoint(self, x, y, points):
"""
:type x: int
:type y: int
:type points: List[List[int]]
:rtype: int
"""
result = -1
distance = float('inf')
for i in range(len(points)):
point = points[i]
xx, yy = point[0], point[1]
if xx == x or yy == y:
d = abs(xx-x)+abs(yy-y)
if d < distance:
distance = d
result = i
return result
运行结果
Runtime: 608 ms, faster than 31.19% of Python online submissions for Find Nearest Point That Has the Same X or Y Coordinate.
Memory Usage: 18.8 MB, less than 86.63% of Python online submissions for Find Nearest Point That Has the Same X or Y Coordinate.
原题链接:leetcode.com/problems/fi…
您的支持是我最大的动力