Skip to content

1798. Max Number Of K Sum Pairs

Difficulty: Medium

LeetCode Problem View on GitHub


1798. Max Number of K-Sum Pairs

Medium


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:

Input: nums = [3,1,3,4,3], k = 6
Output: 1
Explanation: Starting with nums = [3,1,3,4,3]:
- Remove the first two 3's, then nums = [1,4,3]
There are no more pairs that sum up to 6, hence a total of 1 operation.

 

Constraints:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 109
  • 1 <= k <= 109

Solution

class Solution {
    public int maxOperations(int[] nums, int k) {
        int n = nums.length, count = 0;
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int ele : nums) map.put(ele, map.getOrDefault(ele, 0) + 1);
        for (int i = 0; i < n; i++) {
            int current_ele = nums[i];
            if (map.containsKey(current_ele)) {
                int req = k - current_ele;
                if (current_ele == req) {
                    if (map.containsKey(current_ele) && map.getOrDefault(current_ele, 0) > 1) {
                        count++;
                        map.put(req, map.getOrDefault(req, 0) -1);
                        map.put(current_ele, map.getOrDefault(current_ele, 0) -1);
                        if (map.getOrDefault(req, 0) == 0) map.remove(req);
                        if (map.getOrDefault(current_ele, 0) == 0) map.remove(current_ele);
                    }
                }
                else if (map.containsKey(req)) {
                    count++;
                    map.put(req, map.getOrDefault(req, 0) -1);
                    map.put(current_ele, map.getOrDefault(current_ele, 0) -1);
                    if (map.getOrDefault(req, 0) == 0) map.remove(req);
                    if (map.getOrDefault(current_ele, 0) == 0) map.remove(current_ele);
                }
            }
        }
        return count;
    }
}

Complexity Analysis

  • Time Complexity: O(?)
  • Space Complexity: O(?)

Approach

Detailed explanation of the approach will be added here