สมมติว่าเรามีรายการที่นั่งที่มีเลข 0 และ 1 เท่านั้น โดยที่ seat[i] หมายถึงที่นั่ง เมื่อเป็น 1 ก็จะถูกครอบครอง มิฉะนั้น จะว่าง มีที่นั่งว่างอย่างน้อยหนึ่งที่นั่งและที่นั่งว่างอย่างน้อยหนึ่งที่นั่ง เราต้องหาระยะทางสูงสุดจากที่นั่งว่างไปยังที่นั่งว่างที่ใกล้ที่สุด
ดังนั้น หากอินพุตเหมือนกับที่นั่ง =[1, 0, 1, 0, 0, 0, 1] เอาต์พุตจะเป็น 2 เนื่องจากเราสามารถครอบครองที่นั่งได้[4] ระยะห่างคือ 2
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
res :=0
-
สุดท้าย :=-1
-
n :=ขนาดที่นั่ง
-
สำหรับฉันอยู่ในช่วง 0 ถึง n - 1 ทำ
-
ถ้าที่นั่ง[i] คือ 1 แล้ว
-
res :=สูงสุดของ res และ (i ถ้าสุดท้าย <0 มิฉะนั้น ชั้นของ (i-last)/2)
-
สุดท้าย :=ฉัน
-
-
-
คืนค่าสูงสุดของ res และ (n-last-1)
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น
def solve(seats): res, last, n = 0, -1, len(seats) for i in range(n): if seats[i]: res = max(res, i if last < 0 else (i - last) // 2) last = i return max(res, n - last - 1) seats = [1, 0, 1, 0, 0, 0, 1] print(solve(seats))
อินพุต
[1, 0, 1, 0, 0, 0, 1]
ผลลัพธ์
2