К разбору
Revolut

Алгоритмический тренажер

Алгоритмическая секция в Revolut

Тип тренировки
Алгоритмы
Задач
2
Компания
Revolut
Дата
2025-08-27
Задача 1EasyСвязный списокДва указателя

Удалить дубликаты из отсортированного списка

Условие задачи

Дан отсортированный по неубыванию список values, который представляет значения linked list.

Удалите дубликаты так, чтобы каждое значение осталось ровно один раз, и верните итоговый список значений.

На реальном собеседовании задача давалась через ListNode и изменение ссылок .next; в тренажере используется list[int], чтобы автотесты были детерминированными. Алгоритм тот же: один проход и пропуск соседних дубликатов.

Сигнатура

def delete_duplicates_sorted(values: list[int]) -> list[int]:

Ваше решение

Консоль
Нажмите «Запустить проверки» или Ctrl+Enter

Идея решения

Держим два указателя: последний уникальный узел и текущий узел.

Так как список отсортирован, одинаковые значения идут подряд. Когда current.val отличается от last_unique.val, связываем last_unique.next с current и двигаем last_unique. В конце обнуляем last_unique.next, чтобы не оставить хвост из дублей.

Оцените сложность
Открыть задачу в тренажере
Задача 2MediumДинамикаМатематика

Минимальное число квадратов в сумме

Условие задачи

Дано целое положительное число n.

Верните минимальное количество perfect squares, сумма которых равна n. Perfect square — это квадрат целого числа: 1, 4, 9, 16, ....

Сигнатура

def min_square_count(n: int) -> int:

Ваше решение

Консоль
Нажмите «Запустить проверки» или Ctrl+Enter

Идея решения

Пусть dp[i] — минимальное число квадратов, которые дают сумму i. Тогда:

dp[i] = min(dp[i - square] + 1) по всем square <= i.

База: dp[0] = 0. Ответ: dp[n].

Оцените сложность
Открыть задачу в тренажере