Max Number of K-Sum Pairs - Complete Solution Guide
Max Number of K-Sum Pairs is LeetCode problem 1679, a Medium level challenge. This complete guide provides step-by-step explanations, multiple solution approaches, and optimized code in python3, java, cpp, c.
Problem Statement
You are given an integer array nums and an integer k . In one operation, you can pick two numbers from the array whose sum equals k and remove them from the array. Return the maximum number of operations you can perform on the array . Example 1: Input: nums = [1,2,3,4], k = 5 Output: 2 Explanation: Starting with nums = [1,2,3,4]: - Remove numbers 1 and 4, then nums = [2,3] - Remove numbers 2 and 3, then nums = [] There are no more pairs that sum up to 5, hence a total of 2 operations. Example 2:
Detailed Explanation
The problem asks us to find the maximum number of pairs in a given array `nums` that sum up to a target value `k`. In each operation, we can select two numbers from the array that add up to `k` and remove them. The goal is to maximize the number of such operations we can perform.
Solution Approach
The provided solutions all use a hash table (or counter) to store the frequency of each number in the input array `nums`. The algorithm iterates through the array, and for each number `num`, it calculates the `complement` needed to reach the target sum `k`. It then checks if the `complement` exists in the hash table and has a frequency greater than 0. If it does, a pair is found, the operation count is incremented, and the frequency of the `complement` is decremented in the hash table. If the `complement` is not found or its frequency is 0, the frequency of the current number `num` is incremented in the hash table.
Step-by-Step Algorithm
- Step 1: Initialize a hash table (or counter) called `counts` to store the frequency of each number in the array.
- Step 2: Initialize a variable `operations` to 0. This variable will keep track of the number of successful operations.
- Step 3: Iterate through the input array `nums`.
- Step 4: For each number `num` in `nums`, calculate its complement: `complement = k - num`.
- Step 5: Check if the `complement` exists in the `counts` hash table and if its frequency is greater than 0.
- Step 6: If the `complement` exists and its frequency is greater than 0:
- a. Increment `operations` by 1.
- b. Decrement the frequency of the `complement` in the `counts` hash table.
- Step 7: Otherwise (if the `complement` doesn't exist or its frequency is 0):
- a. Increment the frequency of the current number `num` in the `counts` hash table.
- Step 8: After iterating through the entire array, return the value of `operations`.
Key Insights
- Insight 1: The core idea is to find pairs of numbers that sum to `k`. This immediately suggests using a hash table (or counter) to efficiently keep track of the frequency of each number in the array.
- Insight 2: For each number `num` in the array, we need to check if its complement `k - num` exists in the array and has a frequency greater than 0. If it does, we can form a pair and decrement the frequency of both `num` and `k - num`.
- Insight 3: Careful handling of duplicate numbers is crucial. The counter data structure helps ensure that we only remove pairs when both numbers are available in sufficient quantities.
Complexity Analysis
Time Complexity: O(n)
Space Complexity: O(n)
Topics
This problem involves: Array, Hash Table, Two Pointers, Sorting.
Companies
Asked at: DE Shaw.