0084. Largest Rectangle in Histogram
- Thẻ: Ngăn xếp, Mảng, Ngăn xếp đơn điệu
- Độ khó: Khó
Tóm tắt đề bài
Cho một mảng số nguyên không âm heights
, heights[i]
được sử dụng để biểu thị chiều cao của cột tương ứng trong biểu đồ cột. Mỗi cột kề nhau và có chiều rộng là 1.
Yêu cầu: Tính toán diện tích của hình chữ nhật lớn nhất mà có thể được hình thành từ các cột trong biểu đồ.
Ý tưởng giải quyết
Có một số cách tiếp cận để giải quyết bài toán này. Dưới đây là một cách tiếp cận sử dụng ngăn xếp đơn điệu.
- Thêm một phần tử
0
vào cuối mảngheights
để đảm bảo rằng tất cả các cột đều được xem xét. - Khởi tạo biến
ans
để lưu kết quả, và một ngăn xếp rỗngstack
. - Duyệt qua từng cột trong mảng
heights
:- Nếu ngăn xếp không rỗng và chiều cao của cột hiện tại nhỏ hơn hoặc bằng chiều cao của cột đỉnh ngăn xếp, thực hiện các bước sau:
- Lấy phần tử đỉnh ngăn xếp ra khỏi ngăn xếp, gán cho biến
cur
. - Tính toán chỉ số
left
vàright
của hình chữ nhật lớn nhất có thể được tạo thành từ cột hiện tại và cột đỉnh ngăn xếp. - Tính diện tích của hình chữ nhật và so sánh với
ans
, lưu giá trị lớn nhất.
- Lấy phần tử đỉnh ngăn xếp ra khỏi ngăn xếp, gán cho biến
- Đẩy chỉ số của cột hiện tại vào ngăn xếp.
- Nếu ngăn xếp không rỗng và chiều cao của cột hiện tại nhỏ hơn hoặc bằng chiều cao của cột đỉnh ngăn xếp, thực hiện các bước sau:
- Trả về kết quả
ans
.
Code
Độ phức tạp
- Độ phức tạp thời gian: .
- Độ phức tạp không gian: .