สมมติว่าเรามีรายการอุณหภูมิรายวัน T เราต้องกลับรายการเพื่อให้แสดงจำนวนวันที่เราต้องรอจนกว่าอุณหภูมิจะอุ่นขึ้น . หากไม่มีวันเป็นไปได้ ให้เก็บ 0 ไว้แทน ตัวอย่างเช่น ถ้า T =[73, 74, 75, 71, 69, 72, 76, 73] ผลลัพธ์จะเป็น [1, 1, 4, 2, 1, 1, 0, 0]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ans :=อาร์เรย์ที่มีขนาดเท่ากับ T และเติมค่านี้ด้วย 0
- กำหนดหนึ่งสแต็ก และใส่ 0 ลงในสแต็ก และ i :=1
- ในขณะที่ฉัน <ความยาวของ T
- ในขณะที่การนับองค์ประกอบสแต็กไม่ใช่ 0 และ T[i]> T[องค์ประกอบบนสุดของสแต็ก]
- ดัชนี :=สแต็คองค์ประกอบด้านบน
- ans[index] :=i – ดัชนี
- ลบองค์ประกอบด้านบนออกจากสแต็ก
- ถ้าความยาวของ stack เป็น 0 หรือ T[i] <=T[stack top element]
- แทรก i ลงในสแต็ก
- เพิ่ม i ขึ้น 1
- ในขณะที่การนับองค์ประกอบสแต็กไม่ใช่ 0 และ T[i]> T[องค์ประกอบบนสุดของสแต็ก]
- คืนสินค้า
ตัวอย่าง(Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อทำความเข้าใจ −
class Solution(object): def dailyTemperatures(self, T): ans = [0 for i in range(len(T))] stack = [] stack.append(0) i=1 while i <len(T): while len(stack) and T[i]>T[stack[-1]]: index = stack[-1] ans[index] = i-index stack.pop() if not len(stack) or T[i]<=T[stack[-1]]: stack.append(i) i+=1 return ans ob1 = Solution() print(ob1.dailyTemperatures([73,74,75,71,69,72,76,73]))
อินพุต
[73,74,75,71,69,72,76,73]
ผลลัพธ์
[1, 1, 4, 2, 1, 1, 0, 0]