Program to find max number of K-sum pairs in Python

PythonServer Side ProgrammingProgramming

Suppose we have an array called nums and another value k. In one operation, we can select two elements from nums whose sum is equals to k and remove them from the array. We have to find the maximum number of operations we can perform on the array.

So, if the input is like nums = [8,3,6,1,5] k = 9, then the output will be 2 as we can delete [3,6] whose sum is 9, then remove [8,1] whose sum is also 9.

To solve this, we will follow these steps −

  • counter := a map holding frequency of each item present in nums
  • res := 0
  • for each num in counter, do
    • if counter[k-num] is non-zero, then
      • if num is not same as k - num, then
        • res := res + minimum of counter[num] and counter[k-num]
        • counter[k-num] := 0
        • counter[num] := 0
      • otherwise,
        • res := res + quotient of (counter[num] / 2)
  • return res

Example

Let us see the following implementation to get better understanding −

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))

Input

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

Output

2
raja
Published on 06-Oct-2021 10:45:25
Advertisements