There are n buildings in a line. You are given an integer array heights of size n that represents the heights of the buildings in the line.
The ocean is to the right of the buildings. A building has an ocean view if the building can see the ocean without obstructions. Formally, a building has an ocean view if all the buildings to its right have a smaller height.
Return a list of indices (0-indexed) of buildings that have an ocean view, sorted in increasing order.
solution
Use a monotonic stack to find all the buildings that don’t have a taller building to the right.
def findBuildings(self, heights: List[int]) -> List[int]:
stack = []
for i, h in enumerate(heights):
while stack and stack[-1][0] <= h:
stack.pop()
stack.append((h, i))
return [x[1] for x in stack]