Задача Яндекса.
За последние два месяца эта задача попадалась много раз.
Дается массив из 0 и 1.
Гарантируется что есть хотя бы один ноль и одна единица. Найти такую позицию нуля, что ближайшее расстояние до единицы максимальная.
Решение:
Во первых поймем, что между двумя единицами нужно выбрать позицию посередине.
…1,0,0,0,0,0,1,…..
Значит мы можем идти слева направо, хранить в переменной last последнюю позицию единицы. Если мы сейчас стоим в позиции i и в этой позиции единица, тогда мы пытаемся поставить единицу в позицию (i+last)/2, расстояния до ближайшей единицы равно min( (i+last)/2-last, i- (i+last)/2)
обновляем ответ если это расстояние больше чем нынешний ответ.
Остается случай, когда последовательность начинается с нуля или заканчивается нулем.
У многих проблема возникает в реализации задачи, так как пытаются фиксировать позицию нуля, потом искать слева ближайшую единицу и справа, что конечно сложнее реализовать.
Post #189
10.6K
- 🔥 22
- 😭 10
- ❤ 5
- 👍 1
- 👏 1