Java Algorithms
111 subscribers
625 photos
623 links
Добро пожаловать💡

Канал для всех, кто ищет качественные решения и объяснения задач на Java

Roadmap по каналу:
https://t.me/algoroadmap/2
Download Telegram
Решение задачи 272

Time: O(n)
Space: O(n)

💡 Идея
🟦Решение сводится к знакомому алгоритму на нахождение k ближайших элементов с применением бинарного поиска, если собрать отсортированный список из узлов дерева

🟦Для этого необходимо пройти бинарное дерево поиска in-order:
рекурсивно проходим до самого левого элемента (наименьшего), затем, поднимаясь вверх по стеку рекурсии, добавляем значение узла в список и переходим к правому поддереву, продолжая обход

🟦В результате получаем отсортированный список, к которому применяем бинарный поиск для нахождения левой границы ответа:
если элемент mid ближе к target, чем mid + k, значит элемент mid + k, а также каждый элемент справа от него не может быть в ответе, поэтому, перемещаем правую границу

та же самая логика, но в обратном порядке — если элемент mid + k ближе к target, перемещаем левую границу

🟦В конце возвращаем k элементов из списка, используя найденную границу: subList(left, left + k)

👩‍💻 Java Algo | #solution272
Please open Telegram to view this post
VIEW IN TELEGRAM