Ctrl K

Цикл прыжков в одну сторону

Средняя
Клетки выложены по кругу, в клетке i записано ненулевое число jumps[i]. Стоя в клетке i, фишка прыгает на jumps[i] клеток: вперёд, если число положительное, и назад, если отрицательное. Круг замкнут: шаг вперёд с последней клетки ведёт на первую, шаг назад с первой — на последнюю. Назовём **циклом** последовательность клеток, по которой фишка ходит бесконечно, если: - в нём больше одной клетки; - все его прыжки направлены в одну сторону — все вперёд или все назад. Верните True, если в массиве есть хотя бы один такой цикл, иначе False. Попробуйте решить за O(n) времени и O(1) дополнительной памяти.
Пример 1
jumps=[1, 2, -1, 2] → True

Из клетки 1 прыжок на 2 вперёд ведёт в 3, а из 3 на 2 вперёд по кругу — снова в 1. Цикл 1 → 3 → 1 длиной 2, оба прыжка вперёд.

Пример 2
jumps=[3, -2, 4] → False

Клетка 0 прыгает на 3 вперёд и возвращается сама в себя — такой цикл длины 1 не считается. Путь 1 → 2 → 0 не замыкается, а из 0 дальше идёт только петля. Ответ False.

Пример 3
jumps=[1, -1] → False

Цикл 0 → 1 → 0 есть, но 0 прыгает вперёд, а 1 — назад.

Ограничения
  • 1 ≤ len(jumps) ≤ 10⁵
  • -1000 ≤ jumps[i] ≤ 1000
  • jumps[i] ≠ 0
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПодпоследовательность только одного слова СредняяПары с заданной разницей СредняяТройки с точной суммой СредняяСлово растёт по букве СредняяКвадрат равен произведению пары Средняя
загружаем Python…
Вход
jumps=[1, 2, -1, 2]
Ожидается
True

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