Khó 0 đã giải Tỷ lệ chấp nhận 0%

Trapping Rain Water

Compute how much rain water an elevation map holds.

Bạn sẽ học được gì

  • Tính lượng nước trên mỗi cột
  • Dùng giá trị lớn nhất bên trái và bên phải
  • Giải bằng hai con trỏ trong O(n)

Đề bài

Bars of width 1 have the given heights. After rain, water collects above each bar up to the lower of the tallest bars on its left and right. Compute the total trapped water. An O(n) two-pointer solution is expected.

Implement trapped_water(heights).

Input

heights: Bar heights from left to right.

Output

Return the total units of water.

Ràng buộc

0 ≤ length ≤ 200,000; 0 ≤ height ≤ 100,000

Ví dụ

Ví dụ 1
Đầu vào:
heights = [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]

Kết quả mong đợi:
expected = 6
Đầu vào:
std::vector<long long> heights = {0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1};

Kết quả mong đợi:
long long expected = 6;
Đầu vào:
long[] heights = new long[] {0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1};

Kết quả mong đợi:
long expected = 6;

Giải thích

Water fills the dips: 1 + 1 + 2 + 1 + 1 = 6 units.

Ví dụ 2
Đầu vào:
heights = [3, 2, 1]

Kết quả mong đợi:
expected = 0
Đầu vào:
std::vector<long long> heights = {3, 2, 1};

Kết quả mong đợi:
long long expected = 0;
Đầu vào:
long[] heights = new long[] {3, 2, 1};

Kết quả mong đợi:
long expected = 0;

Giải thích

Heights only go down, so water runs off: 0.

Hướng tiếp cận

Hãy tự thử trước, sau đó mở từng gợi ý một.

Gợi ý 1

Mực nước tại mỗi vị trí bị giới hạn bởi cột cao nhất bên trái và bên phải, lấy theo bên thấp hơn.

Gợi ý 2

Theo dõi ranh giới từ cả hai đầu, luôn tiến về phía có ranh giới hiện tại nhỏ hơn.

Gợi ý 3

Cẩn thận với input rỗng và các đoạn phẳng có chiều cao bằng nhau; chỉ phía nhỏ hơn mới quyết định lượng nước giữ lại ở đó.

Độ phức tạp mong đợi

thời gian O(n), bộ nhớ phụ O(1)

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.