Ctrl K

Отмеченные отрезки цепочки

Средняя
Дан односвязный список head, все значения в нём различны, и массив marked — часть этих значений (тоже без повторов, в любом порядке). Отметим в списке узлы со значениями из marked. Посчитайте, на сколько непрерывных отрезков разбиваются отмеченные узлы, если идти по списку от начала до конца. Два отмеченных узла попадают в один отрезок, если между ними в списке нет неотмеченных.
Пример 1
head=list_node([3, 0, 4, 1, 2]), marked=[0, 4, 2] → 2

В списке подряд идут отмеченные 0 и 4 — это один отрезок, затем 1 не отмечена, и 2 образует второй.

Пример 2
head=list_node([5, 2, 7]), marked=[7, 5, 2] → 1

Отмечены все узлы — это один сплошной отрезок. Порядок в marked значения не имеет.

Ограничения
  • 1 ≤ число узлов ≤ 10⁵
  • 0 ≤ Node.val ≤ 10⁵, все значения различны
  • 1 ≤ len(marked) ≤ число узлов
  • Значения marked различны и все встречаются в списке
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиВычистить запрещённые значения СредняяСудоку без конфликтов СредняяРазложить анаграммы по группам СредняяНулевые кресты СредняяДерево по прямому и симметричному обходам Средняя
загружаем Python…
Вход
head=list_node([3, 0, 4, 1, 2]), marked=[0, 4, 2]
Ожидается
2

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 104 теста на сервере, включая скрытые.