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 }
Նշում՝
- Մենք անցնում ենք շարքով և հիշում ենք վերջին զբաղեցրած տեղը:
- Ամեն զբաղեցրած տեղին համարում ենք հեռավորությունը նախորդից և վերցնում ենք կեսը (ամենաերակ տեղը նրանց միջև):
- Նաեւ հաշվի ենք առնում հեռավորությունները շարքի սկզբից մինչև առաջին զբաղեցրած տեղը և վերջին զբաղեցրած տեղից մինչև վերջը:
- Վերադարձնում ենք այդ հեռավորությունների մեծագույնը: