আমাদের একটি অ্যারে দেওয়া আছে যাতে বিভিন্ন বিল্ডিংর উচ্চতা রয়েছে। বিল্ডিংগুলো একটি লাইনে অবস্থিত, এবং একটি বিল্ডিংর ভালো ভিউ থাকে যদি সেটি অন্য কোনো উচ্চতর বিল্ডিং দ্বারা অবরুদ্ধ না হয়। তাই উচ্চতা ধারণকারী অ্যারে দেওয়া থাকলে, আমাদের এমন বিল্ডিংগুলো বের করতে হবে যাদের ভিউ অন্য কোনো উচ্চতর বিল্ডিং দ্বারা বাধা পায় না। অ্যারে থেকে সেই ইন্ডেক্সগুলো রিটার্ন করতে হবে যেগুলো শর্ত পূরণ করে।
উদাহরণস্বরূপ, ইনপুট height = [5, 6, 8, 7] হলে আউটপুট হবে [2, 3]। অ্যারে ইন্ডেক্স ০ এবং ১-এর বিল্ডিংগুলো ইন্ডেক্স ২-এর বিল্ডিং দ্বারা অবরুদ্ধ। ইন্ডেক্স ২ এবং ৩-এর বিল্ডিংগুলো বাধা পায় না কারণ উচ্চতর বিল্ডিংটি (পজিশন ২) ছোট বিল্ডিংটির (পজিশন ৩) পেছনে অবস্থিত।
সমাধানের ধাপসমূহ
res := একটি নতুন লিস্টh := 0i=heights-এর আকার - 1 থেকে -1 পর্যন্ত ১ কমানো হারে লুপ চালান:যদি
heights[i] > hহয়, তবে:i-কেres-এর শেষে যোগ করুনh := heights[i]
res-এর রিভার্স রিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালোভাবে বুঝার জন্য:
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]