Сегодня мы разберем классическую задачу с собеседования в Яндекс на позицию аналитика/ML-инженера. Мне ее давали и в Яндекс, и в несколько других компаний. Короче, задача смак - пугает незнающих и не пугает знающих. Поехали! Дано n точек на плоскости с целыми координатами, по модулю не превосходящие 10^9. Необходимо проверить, существует ли у данных точек вертикальная ось симметрии. Например, у набора точек (0, 0), (2, 0), (-1, 3), (3, 3), (1, 1) такая ось есть, в x=1, что можно заметить по картинке. Что мы точно знаем про вертикальную ось симметрии? Очевидно, что самая левая точка (на картинке - C) и самая правая точка (на картинке - D) будут относительно этой оси по координате x симметричны. Тогда мы можем точно найти ось симметрии, если она есть - взять среднее арифметическое x координат крайних точек. Теперь, когда у нас есть кандидат на ось симметрии, достаточно проверить что все точки находят себе пару. Мы можем отзеркалить все точки справа от оси симметрии, и они должны идеально
Хватит бояться собеседований в Яндекс - разнос алгосекции. Ось симметрии и множества.
17 февраля17 фев
9
1 мин