ধরুন আমাদের দুটি তালিকা আছে l1 এবং l2, আমাদের এই ক্রিয়াকলাপটি বারবার প্রয়োগ করে তালিকাগুলিকে সমান করতে হবে - একটি সাবলিস্ট চয়ন করুন এবং পুরো সাবলিস্টটিকে তার যোগফল দিয়ে প্রতিস্থাপন করুন। অবশেষে উপরের ক্রিয়াকলাপগুলি প্রয়োগ করার পরে সম্ভাব্য দীর্ঘতম ফলাফলের তালিকার আকার ফিরিয়ে দিন। যদি কোন সমাধান না হয়, -1 রিটার্ন করুন।
সুতরাং, যদি ইনপুটটি l1 =[1, 4, 7, 1, 2, 10] l2 =[5, 6, 1, 3, 10] এর মতো হয়, তাহলে আউটপুট হবে 4, যেন আমরা এই অপারেশনটি সম্পাদন করি অনুসরণ করে -
- l1 এর সাবলিস্ট নিন [1, 4] আমরা পাব [5, 7, 1, 2, 10]
- l1 এর সাবলিস্ট নিন [1, 2] আমরা পাব [5, 7, 3, 10]
- l2 এর সাবলিস্ট [6, 1] নিন আমরা [5, 7, 3, 10] পাব।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- i :=l1 - 1 এর আকার, j :=l2 - 1 এর আকার, res :=0
- যখন i>=0 এবং j>=0, do
- যদি l1[i] l2[j] এর মত হয়, তাহলে
- res :=res + 1, i :=i - 1, j :=j - 1
- অন্যথায় যখন l1[i]
- যদি i> 0 অ-শূন্য হয়, তাহলে
- l1[i - 1] :=l1[i - 1] + l1[i]
- i :=i - 1
- যদি i> 0 অ-শূন্য হয়, তাহলে
- যদি l1[i] l2[j] এর মত হয়, তাহলে
- অন্যথায় যখন l1[i]> l2[j], তারপর
- যদি j> 0 হয়, তাহলে
- l2[j - 1] :=l2[j - 1] + l2[j]
- j :=j - 1
- যদি j> 0 হয়, তাহলে
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution: def solve(self, l1, l2): i, j, res = len(l1) - 1, len(l2) - 1, 0 while i >= 0 and j >= 0: if l1[i] == l2[j]: res, i, j = res + 1, i - 1, j - 1 elif l1[i] < l2[j]: if i > 0: l1[i - 1] += l1[i] i -= 1 elif l1[i] > l2[j]: if j > 0: l2[j - 1] += l2[j] j -= 1 return res if i == -1 and j == -1 else -1 ob = Solution() l1 = [1, 4, 7, 1, 2, 10] l2 = [5, 6, 1, 3, 10] print(ob.solve(l1, l2))
ইনপুট
[1, 4, 7, 1, 2, 10], [5, 6, 1, 3, 10]
আউটপুট
4