Определение наличия вертикальной оси симметрии для набора точек

Вертикальная ось обязана проходить через середину минимального и максимального x. Для каждой точки проверьте наличие отражения (min_x + max_x − x, y), учитывая кратность одинаковых точек.

Короткий ответ

Что ответить на собеседовании

Вертикальная ось обязана проходить через середину минимального и максимального x. Для каждой точки проверьте наличие отражения (min_x + max_x − x, y), учитывая кратность одинаковых точек.

Подробный разбор

Ответ с пояснениями

Условие

Дан массив точек, каждая из которых задаётся целочисленными координатами (x, y). Требуется выяснить, существует ли вертикальная прямая, такая что все точки, не лежащие непосредственно на этой прямой, можно разбить на две группы, являющиеся зеркальными отражениями друг друга относительно найденной прямой. Группы считаются зеркальными, если каждая точка из исходного массива имеет ровно одну соответствующую ей точку из другой группы, расположенную на одинаковом расстоянии от оси и с противоположным знаком по координате x.

def has_vertical_symmetry(pts: list[tuple[int, int]]) -> bool:
    ...

Ответ

Вертикальная ось обязана проходить через середину минимального и максимального x. Для каждой точки проверьте наличие отражения (min_x + max_x − x, y), учитывая кратность одинаковых точек.

Counter сохраняет дубликаты; делить координату оси на два не требуется:

from collections import Counter

def has_vertical_symmetry(pts):
    if not pts:
        return True
    counts = Counter(pts)
    axis_sum = min(x for x, y in pts) + max(x for x, y in pts)
    return all(
        counts[(axis_sum - x, y)] == count
        for (x, y), count in counts.items()
    )

Точки на оси отражаются в себя и допустимы по условию. Ожидаемое время O(n), память O(n). Формулировка про «противоположный знак x» верна только относительно координаты оси, не обязательно относительно нуля.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее