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