मान लीजिए हमारे पास विभिन्न इमारतों की ऊंचाई की एक सूची है। ऊंचाई मूल्य वाली एक इमारत [i] समुद्र को तब देख सकती है जब उसके दायीं ओर की हर इमारत उस इमारत से छोटी हो। हमें भवन सूचकांकों को ढूँढ़ना होगा जहाँ से हम समुद्र को आरोही क्रम में देख सकते हैं।
इसलिए, यदि इनपुट हाइट्स =[8, 12, 12, 9, 10, 6] की तरह है, तो आउटपुट [2, 4, 5] होगा क्योंकि हम इंडेक्स 2 पर ऊंचाई 12 से समुद्र को देख सकते हैं। इंडेक्स 10 पर बिल्डिंग की ऊंचाई 10 और इंडेक्स 5 पर आखिरी बिल्डिंग से।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- स्टैक:=एक नई सूची
- हर इंडेक्स idx और ऊंचाई h ऊंचाई के लिए, करें
- जबकि स्टैक खाली नहीं है और ऊंचाई[स्टैक के शीर्ष] <=h, do
- स्टैक से अंतिम तत्व हटाएं
- जबकि स्टैक खाली नहीं है और ऊंचाई[स्टैक के शीर्ष] <=h, do
- आईडीएक्स को स्टैक में पुश करें
- रिटर्न स्टैक
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
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]