Sobes.tech
Intern

""" Кинотеатрдагы орундар бир сапта жайгашкан. Жаңы келген көрүүчү орунду тандоодо, сапта калган башка көрүүчүлөрдөн эң алыс отуруу үчүн тандайт. Демек, ошол орундан, алардын эң жакын көрүүчүсүнө болгон аралык максималдуу болушу керек. Ар дайым бош орундар бар жана кеминде бир көрүүчү отургандыгы кепилденет. Берилген орундар сапы (нөлдөр жана бирлер массиви) боюнча, тандалган орундан эң жакын көрүүчүсүнө болгон аралыкты (орундар арасындагы боштуктардын саны) кайтарган функция жазгыла. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """

sobes.tech AI

AIден жооп

go package main

import ( "fmt" "math" )

func maxDistance(seats []int) int { maxDist := 0 lastOccupied := -1

for i, seat := range seats {
	if seat == 1 {
		if lastOccupied == -1 {
			// саптын башынан биринчи ээлеген орунга чейинки аралык
			maxDist = i
		} else {
			// эки ээлеген орундар арасындагы аралык
			midDist := (i - lastOccupied) / 2
			if midDist > maxDist {
				maxDist = midDist
			}
		}
		lastOccupied = i
	}
}
// акыркы ээлеген орундан саптын аягыга чейинки аралык
tailDist := len(seats) - 1 - lastOccupied
if tailDist > maxDist {
	maxDist = tailDist
}
return maxDist

}

func main() { fmt.Println(maxDistance([]int{1, 0, 0, 0, 1})) // 2 fmt.Println(maxDistance([]int{1, 0, 1, 0, 0, 1, 0, 0, 1})) // 2 fmt.Println(maxDistance([]int{1, 0, 1, 0})) // 1 }


Түшүндүрмө:
- Биз сапты карап чыгып, акыркы ээлеген орундун индексин эстеп калабыз.
- Ар бир ээлеген орун үчүн, ал мурдагы орун менен аралыкты эсептеп, анын жарымын алабыз (эң алыс жайгашкан орундар арасындагы). 
- Ошондой эле, саптын башынан биринчи ээлеген орунга жана акыркы ээлеген орундан саптын аягыга чейинки аралыкты карайбыз.
- Бул аралыкдардын эң чоңун кайтарабыз.