📌  相关文章
📜  从给定的一组线中找到给定 X 的 Y 的最大值(1)

📅  最后修改于: 2023-12-03 14:49:27.734000             🧑  作者: Mango

从给定的一组线中找到给定 X 的 Y 的最大值

简介

在二维坐标系中有一组线,每条线有若干个点,现在需要从这组线中找到给定 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')