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 }


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