/**
 * 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 <= 10^5
 * 1 <= nums[i] <= 10^9
 * 1 <= k <= 10^9
 * @see <a href="https://leetcode.com/problems/max-number-of-k-sum-pairs/">LeetCode</a>
 */
fun maxOperations(nums: IntArray, k: Int): Int {
    val countMap = mutableMapOf<Int, Int>()
    var result = 0
    nums.forEach { num ->
        val complement = k - num
        if (countMap.getOrDefault(complement, 0) > 0) {
            countMap[complement] = countMap[complement]!! - 1
            result += 1
        } else {
            countMap[num] = 1 + countMap.getOrDefault(num, 0)
        }
    }
    return result
}

/**
 * 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 <= 10^5
 * 1 <= nums[i] <= 10^9
 * 1 <= k <= 10^9
 * @see <a href="https://leetcode.com/problems/max-number-of-k-sum-pairs/">LeetCode</a>
 */
fun maxOperations(nums: IntArray, k: Int): Int {
    val countMap = mutableMapOf<Int, Int>()
    var result = 0
    nums.forEach { num ->
        val complement = k - num
        if (countMap.getOrDefault(complement, 0) > 0) {
            countMap[complement] = countMap[complement]!! - 1
            result += 1
        } else {
            countMap[num] = 1 + countMap.getOrDefault(num, 0)
        }
    }
    return result
}
