สมมติว่าเรามีตัวเลข n แทนจำนวนคนที่กำลังหาที่นั่ง และมีรายการบิตที่ 1 แทนที่นั่งที่มีคนนั่งแล้ว ส่วน 0 แทนที่นั่งว่าง สองคนไม่สามารถนั่งติดกันได้ เราต้องตรวจสอบว่าทุกคน n คนสามารถหาที่นั่งได้หรือไม่
เช่น ถ้าอินพุตคือ n = 2 และ seats = [1, 0, 0, 0, 1, 0, 0] ผลลัพธ์จะเป็น True เพราะสามารถนั่งที่ดัชนี 2 และ 6 ได้
ขั้นตอนการแก้ปัญหา
- แทรก
0ไว้หน้ารายการseatsและแทรก[0, 1]ไว้ท้ายรายการ - กำหนด
res := 0,gap := 0 - วนลูปผ่านแต่ละค่า
iในseats:- ถ้า
i == 0ให้gap := gap + 1 - มิฉะนั้น ถ้า
gap > 0ให้:res := res + floor((gap - 1) / 2)gap := 0
- ถ้า
- คืนค่า
trueถ้าres >= nมิฉะนั้นfalse
ตัวอย่างโค้ด
def solve(n, seats):
seats = [0] + seats + [0, 1]
res = 0
gap = 0
for i in seats:
if i == 0:
gap += 1
elif gap > 0:
res += (gap - 1) // 2
gap = 0
return res >= n
n = 2
seats = [1, 0, 0, 0, 1, 0, 0]
print(solve(n, seats))
อินพุต
2, [1, 0, 0, 0, 1, 0, 0]
เอาต์พุต
True