Menu
CoddyTech

Trapping Rain Water

Một hàng thanh đứng cạnh nhau, mỗi thanh rộng một đơn vị: height[i] là chiều cao của thanh i. Nước mưa đọng lại ở những chỗ trũng giữa các thanh. Nước chỉ đọng phía trên một thanh nếu có một thanh cao hơn ở đâu đó bên trái và một thanh cao hơn ở đâu đó bên phải thanh đó; nước sẽ chảy đi ở phía ngoài thanh đầu tiên và thanh cuối cùng. Hãy trả về tổng số đơn vị nước mà hàng thanh này giữ lại.

Hàm

trap(height: integer-array) → integer
heightinteger-array
chiều cao của từng thanh, từ trái sang phải
Trả vềinteger
tổng số đơn vị nước bị giữ lại

Ràng buộc

  • 1 ≤ height.length ≤ 2 × 104
  • 0 ≤ height[i] ≤ 105
  • Mỗi thanh rộng một đơn vị, và nước không đọng lại bên ngoài thanh đầu tiên hoặc thanh cuối cùng.

Ví dụ

Đầu vào
height = [0, 3, 1, 0, 2, 5, 1, 2]
Đầu ra
7
Giải thích
Giữa 3 và 5, mức là 3: cách 2 đơn vị so với 1, 3 đơn vị so với 0 và 1 đơn vị so với 2. Số 1 phía sau nằm giữa 5 và 2, nên giữ nguyên giá trị 1. Vậy kết quả là 7.
challenge icon

Câu hỏi mở rộng

Giả sử các thanh tạo thành một lưới 2D với các độ cao và nước có thể thoát ra theo cả bốn hướng. Khi đó, bạn sẽ đếm lượng nước bị giữ lại như thế nào?

Đặt lại code
def trap(height):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

height = [0, 3, 1, 0, 2, 5, 1, 2]

Đầu ra mong đợi

7