Номер заявления регистрацию в РКН: № 5731053751
Чат: @algoses_chat
По всем вопросам: @vice22821
Post #300
7.13K
Задача с Яндекса.
Наконец то встретилась новая задача, которая к тому же есть на литкоде.
Дается массив a. Вы стоите на самой левой позиции и хотите попасть на самую последнюю позицию.
Когда вы стоите на позиции i, вы можете прыгнуть максимум на a[i] позиций вперед.
Вернуть true если можно с левого края попасть на правый край.
Пример
3, 1, 2, 0, 0, 4.
Ответ false.
Решение:
От i той позиции мы можем прыгнуть на любую позицию из [i, a[i]+i]. Будем воспринимать это как отрезок.
Тогда у нас получается n отрезков. Они между собой как то пересекаются.
Если два отрезка пересекается это означает что вы можете попасть на любую позицию на объединение отрезков.
Вам надо слить отрезки и убедиться что в одном отрезки находится позиция 0 и позиция n-1.
Слить все отрезки мы можем за О(n), так как отрезки отсортированы по первому числу. (кстати задача про сливания отрезков это старая задача Яндекса)
Ссылка в комментариях.
@algoses
Наконец то встретилась новая задача, которая к тому же есть на литкоде.
Дается массив a. Вы стоите на самой левой позиции и хотите попасть на самую последнюю позицию.
Когда вы стоите на позиции i, вы можете прыгнуть максимум на a[i] позиций вперед.
Вернуть true если можно с левого края попасть на правый край.
Пример
3, 1, 2, 0, 0, 4.
Ответ false.
Решение:
От i той позиции мы можем прыгнуть на любую позицию из [i, a[i]+i]. Будем воспринимать это как отрезок.
Тогда у нас получается n отрезков. Они между собой как то пересекаются.
Если два отрезка пересекается это означает что вы можете попасть на любую позицию на объединение отрезков.
Вам надо слить отрезки и убедиться что в одном отрезки находится позиция 0 и позиция n-1.
Слить все отрезки мы можем за О(n), так как отрезки отсортированы по первому числу. (кстати задача про сливания отрезков это старая задача Яндекса)
Ссылка в комментариях.
@algoses
- ❤ 16
- 🔥 4
- 👍 2
- ❤🔥 1
- 👏 1
