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

পাইথনে সর্বোচ্চ K-সম পেয়ারের সংখ্যা বের করার প্রোগ্রাম


মনে করুন nums নামক একটি অ্যারে এবং k নামক একটি মান আছে। এক অপারেশনে আমরা nums থেকে দুটি এলিমেন্ট সিলেক্ট করতে পারি যাদের যোগফল k এবং সেগুলো অ্যারে থেকে রিমুভ করতে পারি। আমাদের অ্যারেতে সর্বোচ্চ কতবার এই অপারেশন করা যায় তা বের করতে হবে।

যেমন, ইনপুট nums = [8,3,6,1,5], k = 9 হলে, আউটপুট হবে ২ কারণ [3,6] (যোগফল ৯) রিমুভ করলে, তারপর [8,1] (যোগফল ৯) রিমুভ করা যায়।

সমাধান পদ্ধতি

এই সমস্যাটি সমাধান করতে নিচের ধাপগুলো অনুসরণ করুন:

  • counter := nums-এ থাকা প্রতিটি আইটেমের ফ্রিকোয়েন্সি ধারণকারী একটি ম্যাপ
  • res := 0
  • counter-এ থাকা প্রতিটি num-এর জন্য
    • যদি counter[k-num] নন-জিরো হয়, তবে
      • যদি num != k - num হয়, তবে
        • res := res + min(counter[num], counter[k-num])
        • counter[k-num] := 0, counter[num] := 0
      • অন্যথায়,
        • res := res + counter[num] // 2
  • res রিটার্ন করুন

উদাহরণ

নিচের ইমপ্লিমেন্টেশনটি দেখুন আরও ভালো বোঝার জন্য:

 from collections import Counter def solve(nums, k):    counter = Counter(nums)    res = 0    for num in counter:       if counter.get(k-num, 0):          if num != k - num:             res += min(counter[num], counter[k-num])             counter[k-num] = 0             counter[num] = 0          else:             res += int(counter[num] / 2)    return res nums = [8,3,6,1,5] k = 9 print(solve(nums, k))

ইনপুট

[8,3,6,1,5], 9 

আউটপুট

2

  1. Python দিয়ে বাইনারি ট্রিতে ভালো লিফ নোড পেয়ার সংখ্যা বের করার প্রোগ্রাম

  2. পাইথনে BST-এ নির্দিষ্ট রেঞ্জে থাকা নোডের সংখ্যা খুঁজে বের করার প্রোগ্রাম

  3. পাইথন প্রোগ্রাম লিস্টে সবচেয়ে ছোট সংখ্যা বের করা

  4. পাইথনে লিস্ট থেকে সর্বোচ্চ সংখ্যা বের করা