ধরুন আমাদের কাছে কোষ নামক সংখ্যার একটি তালিকা আছে; এই তালিকাটি বিভিন্ন কক্ষের আকারের প্রতিনিধিত্ব করছে। এখন, প্রতিটি পুনরাবৃত্তিতে, দুটি বৃহত্তম কোষ a এবং b এই নিয়ম অনুসারে যোগাযোগ করে:সুতরাং, যদি a =b, তারা উভয়ই মারা যায়। অন্যথায়, দুটি কোষ একত্রিত হয় এবং তাদের আকার ((a + b)/3) তল হয়ে যায়। আমাদের শেষ কক্ষের আকার খুঁজে বের করতে হবে অথবা কোনো সেল অবশিষ্ট না থাকলে -1 ফেরত দিতে হবে।
সুতরাং, যদি ইনপুটটি [20,40,40,30] এর মত হয়, তাহলে আউটপুট হবে 16, প্রথম পুনরাবৃত্তিতে, 40 এবং 40 মারা যাবে, তারপর 20 এবং 30 (20+30) / 3 এর ফ্লোরে পরিণত হবে। =50/3 =16 তলা
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
কোষ :=কোষ অ্যারের প্রতিটি মান ঋণাত্মক রূপান্তর করুন
-
কোষ দিয়ে একটি গাদা তৈরি করুন
-
ঘর খালি না থাকার সময় −
করুন-
কোষ থেকে দুটি উপাদান মুছে ফেলুন এবং তাদের আবার নেতিবাচক রূপান্তর করুন, এবং পরপর প্রথম এবং দ্বিতীয় হিসাবে তাদের বরাদ্দ করুন
-
-
যদি প্রথমটি সেকেন্ডের সমান না হয়, তাহলে −
-
স্তূপে (প্রথম+দ্বিতীয়)/3) ফ্লোরের ঋণাত্মক ঢোকান
-
-
কোষের নেতিবাচক ফেরত দিন[0] যদি কোষে কিছু উপাদান থাকে অন্যথায় - 1
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
from heapq import heapify, heappop, heappush class Solution: def solve(self, cells): cells=[-x for x in cells] heapify(cells) while len(cells)>1: first,second = -heappop(cells), -heappop(cells) if first!=second: heappush(cells, -((first+second)//3)) return -cells[0] if cells else -1 ob = Solution() cells = [20,40,40,30] print(ob.solve(cells))
ইনপুট
[20,40,40,30]
আউটপুট
16