Mô tả bài toán
Cho mảng heights chiều cao các tòa nhà trên một đường thẳng. Tòa nhà có tầm nhìn tốt nếu không bị che khuất bởi tòa nhà cao hơn phía sau (bên phải). Trả về chỉ số các tòa nhà có tầm nhìn tốt.
Ví dụ
Nếu heights = [5, 6, 8, 7], đầu ra là [2, 3]. Tòa nhà 0,1 bị che bởi tòa 2. Tòa 2,3 không bị che.
Giải thuật
- Duyệt từ phải sang trái, giữ
hlà chiều cao tối đa đã thấy. - Nếu
heights[i] > h: thêmivào kết quả, cập nhậth. - Đảo ngược kết quả trước khi trả về.
Triển khai Python
def solve(heights):
res, h = [], 0
for i in range(len(heights) - 1, -1, -1):
if heights[i] > h:
res.append(i)
h = heights[i]
return res[::-1]
print(solve([5, 6, 8, 7]))
Đầu vào
[5, 6, 8, 7]
Đầu ra
[2, 3]