কম্পিউটার টিউটোরিয়াল

পাইথনে সাবলিস্ট সম অপারেশন দিয়ে একটি লিস্টকে অন্যটির মতো বানানোর প্রোগ্রাম


মান ল করুন l1 এবং l2 নামে দুটি তালিকা, আমাদের এদের সমান করতে হবে নিচের অপারেশন বারবার প্রয়োগ করে — একটি সাবলিস্ট বেছে নিন, এবং পুরো সাবলিস্টকে তার সম দিয়ে রিপ্লেস করুন। অবশেষে উপরের অপারেশন প্রয়োগ করে সম্ভাব্য সবচেয়ে বড় ফাইনাল লিস্টের আকার ফেরত দিন। যদি সমাধান নেই, -1 ফেরত দিন।

যদি ইনপুট হয় l1 = [1, 4, 7, 1, 2, 10], l2 = [5, 6, 1, 3, 10], তবে আউটপুট হবে ৪, কারণ নিচের অপারেশনগুলো করলে: 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:
    • যদি l1[i] == l2[j], res := res + 1, i := i - 1, j := j - 1
    • অন্যথায় যদি l1[i] < l2[j], যদি i > 0, l1[i-1] := l1[i-1] + l1[i], i := i - 1
    • অন্যথায় যদি l1[i] > l2[j], যদি j > 0, l2[j-1] := l2[j-1] + l2[j], j := j - 1
  • যদি i == -1 এবং j == -1 হয়, res ফেরত দিন, অন্যথায় -1 ফেরত দিন

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন:

উদাহরণ

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

  1. পাইথন প্রোগ্রাম দিয়ে লিস্টকে স্ট্রিংয়ে রূপান্তর

  2. লিস্টের কিউমুলেটিভ সাম বের করার পাইথন প্রোগ্রাম

  3. পাইথনে লিস্টকে স্ট্রিংে কনভার্ট করা

  4. পাইথন প্রোগ্রাম: অ্যারেকে সাধারণ লিস্টে রূপান্তর (toList)