สมมติว่าเรามีรายการความสูงของตึกต่างๆ ตึกที่มีความสูง heights[i] สามารถมองเห็นทะเลได้เมื่อทุกตึกทางขวาของมันมีความสูงต่ำกว่า เราต้องหาดัชนีของตึกที่มองเห็นทะเลได้ เรียงจากน้อยไปมาก
เช่น ถ้าอินพุตคือ heights = [8, 12, 12, 9, 10, 6] ผลลัพธ์จะเป็น [2, 4, 5] เพราะมองเห็นทะเลจากตึกสูง 12 ดัชนี 2, ตึกสูง 10 ดัชนี 4 และตึกสุดท้ายดัชนี 5
ขั้นตอนการแก้ปัญหา
stack := รายการใหม่- สำหรับแต่ละดัชนี
idxและความสูงhในheights:- ในขณะที่
stackไม่ว่าง และheights[stack[-1]] <= h:- ลบสมาชิกสุดท้ายออกจาก
stack
- ลบสมาชิกสุดท้ายออกจาก
- เพิ่ม
idxเข้าstack
- ในขณะที่
- คืนค่า
stack
ตัวอย่างการใช้งาน
def solve(heights):
stack = []
for idx, h in enumerate(heights):
while stack and heights[stack[-1]] <= h:
stack.pop()
stack.append(idx)
return stack
heights = [8, 12, 12, 9, 10, 6]
print(solve(heights))
อินพุต
[8, 12, 12, 9, 10, 6]
เอาต์พุต
[2, 4, 5]