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 <= 1051 <= nums[i] <= 1091 <= 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