Поиск свободного места в кинотеатре
Представим, что у нас есть кинотеатр с одним рядом. Вы пришли посмотреть кино и хотите находиться максимально далеко от других людей.
Условие: в ряду сидит как минимум один зритель.
Чтобы эту задачу рассматривать в качестве задачи на алгоритмы по программированию, надо житейский вид перенести в более привычный... Итак, ряд у нас - это intArray
, состоящий из нулей и единиц, где нуль - это свободное место, а единица - занятое.
fun findDistance(array: IntArray): Int
@Test
fun makeTest() {
Assert.assertEquals(2, findDistance(intArrayOf(1, 0, 0, 0, 1, 1)))
Assert.assertEquals(2, findDistance(intArrayOf(1, 0, 0, 0, 0, 1, 0)))
Assert.assertEquals(3, findDistance(intArrayOf(1, 0, 0, 0, 0, 0, 0, 1, 0)))
Assert.assertEquals(1, findDistance(intArrayOf(1, 0, 1, 0)))
Assert.assertEquals(2, findDistance(intArrayOf(0, 0, 1, 0)))
Assert.assertEquals(3, findDistance(intArrayOf(1, 0, 0, 0)))
Assert.assertEquals(3, findDistance(intArrayOf(0, 0, 0, 1, 0)))
}
fun findDistance(array: IntArray): Int {
var maxDistance = 0
var prevOne = -1
for (i in array.indices) {
val number = array[i]
if (number == 1) {
if (prevOne == -1) {
maxDistance = i
} else {
maxDistance = maxOf(maxDistance, (i - prevOne) / 2)
}
prevOne = i
}
}
if (prevOne != -1)
maxDistance = maxOf(maxDistance, array.size - 1 - prevOne)
return maxDistance
}
upd. Увы, но эту задачку на собесе я не решил. Точнее решил, но не так как в итоге здесь.