📅  最后修改于: 2023-12-03 14:49:27.734000             🧑  作者: Mango
在二维坐标系中有一组线,每条线有若干个点,现在需要从这组线中找到给定 X 坐标的 Y 坐标的最大值。
我们可以先将这组线按 X 坐标从小到大排序,然后对于每条线,采用二分查找的方式找到给定 X 坐标所在的点,并记录最大的 Y 坐标。
def max_y(lines, x):
"""
从给定的一组线中找到给定 X 的 Y 的最大值
Args:
lines: 一组线,每条线是一个列表,包含若干个点,每个点用二元组表示
x: 给定的 X 坐标
Returns:
给定 X 坐标的 Y 坐标的最大值
"""
# 先将线按 X 坐标从小到大排序
lines = sorted(lines, key=lambda l: l[0])
# 记录最大的 Y 坐标
max_y = float('-inf')
for line in lines:
# 二分查找给定 X 坐标所在的点
left, right = 0, len(line) - 1
while left <= right:
mid = (left + right) // 2
if line[mid][0] == x:
max_y = max(max_y, line[mid][1])
break
elif line[mid][0] < x:
left = mid + 1
else:
right = mid - 1
return max_y
lines = [
[(1, 2), (2, 3), (3, 4)],
[(0, 1), (2, 5)],
[(1, 5), (3, 7)]
]
assert max_y(lines, 2) == 5
assert max_y(lines, 4) == 7
assert max_y(lines, 0) == float('-inf')