Giả sử chúng ta có một số n đại diện cho số người đang tìm chỗ ngồi, và một danh sách các bit trong đó 1 biểu thị ghế đã có người ngồi, 0 biểu thị ghế trống. Không có hai người nào được ngồi cạnh nhau. Ta cần kiểm tra xem tất cả n người có thể tìm được chỗ ngồi hay không.
Ví dụ: với n = 2 và seats = [1, 0, 0, 0, 1, 0, 0], kết quả là True vì họ có thể ngồi tại chỉ số 2 và 6.
Thuật toán
- Thêm
0vào đầu mảngseatsvà thêm[0, 1]vào cuối. - Khởi tạo
res = 0(số chỗ ngồi khả dụng) vàgap = 0(độ dài đoạn ghế trống liên tiếp). - Duyệt qua từng phần tử
itrong mảngseats:- Nếu
i == 0: tănggaplên 1. - Ngược lại, nếu
gap > 0:- Cộng vào
resgiá trị(gap - 1) // 2(số người tối đa có thể ngồi trong đoạn trống đó). - Đặt lại
gap = 0.
- Cộng vào
- Nếu
- Trả về
Truenếures >= n, ngược lạiFalse.
Mã Python
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)) # True
Đầu vào / Đầu ra
Input: 2, [1, 0, 0, 0, 1, 0, 0]
Output: True