মনে করুন 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
- যদি num != k - num হয়, তবে
- যদি counter[k-num] নন-জিরো হয়, তবে
- 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