ধরুন আমাদের nums নামে একটি অ্যারে আছে এবং আরেকটি মান k। একটি অপারেশনে, আমরা সংখ্যা থেকে দুটি উপাদান নির্বাচন করতে পারি যার যোগফল k এর সমান এবং তাদের অ্যারে থেকে সরিয়ে ফেলতে পারি। অ্যারেতে আমরা সর্বোচ্চ কতগুলি অপারেশন করতে পারি তা আমাদের খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি nums =[8,3,6,1,5] k =9 এর মত হয়, তাহলে আউটপুট হবে 2 কারণ আমরা মুছে ফেলতে পারি [3,6] যার যোগফল 9, তারপর [8,1] মুছে ফেলুন। ] যার যোগফলও 9।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- কাউন্টার :=সংখ্যায় উপস্থিত প্রতিটি আইটেমের ফ্রিকোয়েন্সি ধরে রাখার একটি মানচিত্র
- res :=0
- কাউন্টারে প্রতিটি সংখ্যার জন্য, করুন
- যদি counter[k-num] অ-শূন্য হয়, তাহলে
- যদি num k - num এর মত না হয়, তাহলে
- res :=res + সর্বনিম্ন কাউন্টার[num] এবং counter[k-num]
- কাউন্টার[k-num] :=0
- কাউন্টার[সংখ্যা] :=0
- অন্যথায়,
- res :=res + (counter[num] / 2) এর ভাগফল
- যদি num k - num এর মত না হয়, তাহলে
- যদি counter[k-num] অ-শূন্য হয়, তাহলে
- রিটার্ন রিটার্ন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
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