สมมติว่าเราได้รับอาร์เรย์ที่มีความสูงของอาคารต่างๆ อาคารต่างๆ ตั้งอยู่บนแนวเส้น และอาคารจะมองเห็นได้ดีกว่าถ้าไม่มีอาคารสูงกว่าอื่นมาบดบัง ดังนั้นหากมีอาร์เรย์ที่มีความสูง เราต้องหาอาคารที่ไม่มีอาคารสูงอื่น ๆ เพื่อบดบังทัศนียภาพจากพวกเขา ดัชนีจะถูกส่งคืนจากอาร์เรย์ที่ตรงตามเกณฑ์
ดังนั้น หากอินพุตเท่ากับความสูง =[5, 6, 8, 7] ผลลัพธ์จะเป็น [2, 3] อาคารในแถวดัชนี 0 และ 1 ถูกปิดกั้นโดยอาคารที่ดัชนี 2 อาคารที่ดัชนี 2 และ 3 ไม่ถูกปิดกั้นเนื่องจากอาคารสูงกว่าที่ตำแหน่ง 2 ตั้งอยู่ด้านหลังอาคารที่สั้นกว่าที่ตำแหน่ง 3
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- res :=รายการใหม่
- ชั่วโมง :=0
- สำหรับ i ในช่วง (ขนาดของความสูง - 1) ถึง -1, ลดลง 1, ทำ
- ถ้า heights[i]> h แล้ว
- ใส่ i ต่อท้าย res
- ชั่วโมง :=ความสูง[i]
- ถ้า heights[i]> h แล้ว
- ส่งคืนรายการย้อนกลับ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
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]))
อินพุต
[5, 6, 8, 7]
ผลลัพธ์
[2, 3]