ধরুন আমাদের একটি অ্যারে সংখ্যা আছে যেখানে n বিভিন্ন কিউবের আকার রয়েছে, সেগুলি অনুভূমিকভাবে স্থাপন করা হয়েছে। আমরা উল্লম্বভাবে কিউব একটি গাদা করতে হবে। নতুন কিউব অনুসরণ করা উচিত −
- যদি ith কিউব jth কিউবের উপরে থাকে, তাহলে jth ওয়ানের পাশের দৈর্ঘ্য অবশ্যই ith ওয়ানের পাশের দৈর্ঘ্যের বেশি বা সমান হতে হবে।
যখন আমরা উল্লম্ব গাদা তৈরি করছি, তখন আমরা কেবল বাম দিক বা ডান দিক থেকে কিউব নিতে পারি কিন্তু মাঝখান থেকে নয়। আমরা তাদের স্তূপ করতে পারি কিনা তা আমাদের পরীক্ষা করতে হবে৷
সুতরাং, যদি ইনপুটটি nums =[1,2,3,7,8] এর মত হয়, তাহলে আউটপুট হবে True কারণ আমরা ডান থেকে বামে বাক্সগুলিকে সফলভাবে পাইল করতে পারি৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- n :=সংখ্যার আকার
- d :=সংখ্যার উপাদানগুলি থেকে একটি ডবল শেষ সারি তৈরি করুন
- পতাকা :=সত্য
- পূর্ববর্তী :=0
- যখন d খালি নয়, কর
- প্রথম :=d[0]
- শেষ :=d[n-1]
- যদি prev 0 এর মত না হয় এবং (first> prev বা last> prev) , তাহলে
- পতাকা :=মিথ্যা
- লুপ থেকে বেরিয়ে আসুন
- যদি প্রথম>=শেষ, তারপর
- prev :=d এর বাম আইটেম, এবং d থেকে মুছে ফেলুন
- অন্যথায়,
- পূর্ববর্তী :=d এর শেষ আইটেম এবং d থেকে মুছে ফেলুন
- যদি পতাকা সত্য হয়, তাহলে
- সত্য ফেরান
- অন্যথায়,
- মিথ্যে ফেরত দিন
উদাহরণ
আরও ভালোভাবে বোঝার জন্য আসুন নিম্নলিখিত বাস্তবায়ন দেখি
from collections import deque
def solve(nums):
n = len(nums)
d = deque(nums)
flag = True
prev = 0
while d:
first = d[0]
last = d[-1]
if prev != 0 and (first > prev or last > prev):
flag = False
break
if first >= last:
prev = d.popleft()
else:
prev = d.pop()
if flag:
return True
else:
return False
nums = [1,2,3,7,8]
print(solve(nums)) ইনপুট
[1,2,3,7,8]
আউটপুট
True