ধরুন আমাদের কিছু শিলা আছে, প্রতিটি শিলার একটি ধনাত্মক পূর্ণসংখ্যা ওজন আছে। প্রতিটি পালা, আমরা দুটি ভারী পাথর নেব এবং তাদের একসাথে ভেঙে ফেলব। বিবেচনা করুন পাথরের ওজন x এবং y এবং x <=y। এই স্ম্যাশের ফলাফল দুই ধরনের হতে পারে।
- যদি x =y হয়, তাহলে উভয় পাথরই সম্পূর্ণ ধ্বংস হয়ে যায়;
- অন্যথায় যখন x !=y, ওজন x এর পাথরটি সম্পূর্ণরূপে ধ্বংস হয়ে যায় এবং ওজন y এর পাথরের নতুন ওজন y-x হয়।
অবশেষে, সর্বাধিক 1টি পাথর বাকি আছে। আমাদের এই পাথরের ওজন খুঁজে বের করতে হবে (কোনও পাথর না থাকলে 0।)
সুতরাং যদি পাথরের ওজন হয় [2,7,4,1,8,1], তাহলে ফলাফল 1 হবে। প্রথমে 7 এবং 8 নির্বাচন করুন, তারপর 1 পাবেন, সুতরাং অ্যারে হবে [2,4,1,1] ,1], দ্বিতীয়ত 2 এবং 4 নিন। অ্যারেটি হবে [2,1,1,1], তারপর 2 এবং 1 নির্বাচন করুন, অ্যারে হবে [1,1,1], তারপর ওজন 1 সহ দুটি পাথর নির্বাচন করুন, তারপর উভয়ই ধ্বংস হয়ে যাবে, তাই অ্যারে হবে [1]। এই হল উত্তর
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- স্টোন ওয়েট অ্যারে W এর কোনো উপাদান না থাকলে, 0 ফেরত দিন
- যদি W এর শুধুমাত্র একটি উপাদান থাকে তাহলে W[0] ফেরত দিন।
- যদিও W এর একাধিক উপাদান আছে −
- বাছাই W
- s1 :=W এর শেষ উপাদান, s2 :=W এর দ্বিতীয় শেষ উপাদান
- যদি s1 =s2 হয়, তাহলে W থেকে s1 এবং s2 সরিয়ে দিন
- অন্যথায় s1 :=|s1 – s2|, W থেকে শেষ উপাদানটি সরান, তারপর s1 কে W এর শেষ উপাদান হিসাবে সেট করুন
- যদি W একটি উপাদান থাকে, তাহলে সেই উপাদানটি ফেরত দিন, অন্যথায় 0 দিন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
class Solution(object): def lastStoneWeight(self, stones): """ :type stones: List[int] :rtype: int """ if len(stones) ==0: return 0 if len(stones) == 1: return 1 while len(stones)>1: stones.sort() s1,s2=stones[-1],stones[-2] if s1==s2: stones.pop(-1) stones.pop(-1) else: s1 = abs(s1-s2) stones.pop(-1) stones[-1] = s1 if len(stones): return stones[-1] return 0 ob1 = Solution() print(ob1.lastStoneWeight([2,7,4,1,6,1]))
ইনপুট
[2,7,4,1,6,1]
আউটপুট
1