मान लीजिए, हमें एक सरणी प्रदान की जाती है जिसमें विभिन्न इमारतों की ऊंचाई होती है। इमारतें एक लाइन पर स्थित हैं, और एक इमारत एक बेहतर दृश्य है यदि यह किसी अन्य ऊंची इमारत से बाधित नहीं है। इसलिए, यदि ऊंचाई वाली सरणी प्रदान की जाती है, तो हमें उन इमारतों का पता लगाना होगा, जिनमें अन्य ऊंची इमारतें नहीं हैं, ताकि उनके दृश्य को बाधित किया जा सके। सूचकांकों को उस सरणी से लौटाया जाता है जो मानदंड को पूरा करती है।
इसलिए, यदि इनपुट ऊंचाई =[5, 6, 8, 7] की तरह है, तो आउटपुट [2, 3] होगा। एरे इंडेक्स 0 और 1 में बिल्डिंग इंडेक्स 2 पर बिल्डिंग द्वारा बाधित है। इंडेक्स 2 और 3 पर बिल्डिंग ब्लॉक नहीं है क्योंकि पोजिशन 2 पर ऊंची बिल्डिंग छोटी बिल्डिंग के पीछे पोजिशन 3 पर स्थित है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- res :=एक नई सूची
- ज :=0
- i के लिए (ऊंचाइयों का आकार -1) से -1 तक, 1 से घटाएं
- यदि ऊंचाई[i]> h , तो
- res के अंत में i डालें
- ज :=ऊंचाई[i]
- यदि ऊंचाई[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]