Max Number of K-Sum Pairs

给一个数组, 里面的数字可能会重复, 问里面有多少组不同的数字对, 可以想加成k.

这个题主要是有重复, 所以用counting来做, 然后要判断2个数字是否重复来更新counting的数组

class Solution {
    public int maxOperations(int[] nums, int k) {
        int res = 0; 
        Map<Integer, Integer> count = new HashMap<>();
        for(int i = 0; i < nums.length; i++) {
            count.put(nums[i], count.getOrDefault(nums[i], 0) + 1);
        }
        for(int i = 0; i < nums.length; i++) {
            int n = count.getOrDefault(nums[i], 0); 
            int m = count.getOrDefault(k - nums[i], 0);
            if((nums[i] == k - nums[i] && m > 1)) { // if two numbers are same
                count.put(nums[i], n - 2);
                res++;
            } else if(nums[i] != k - nums[i] && n > 0 && m > 0) { // or two number are diff
                count.put(nums[i], n - 1);
                count.put(k - nums[i], m - 1);
                res++;
            }
        }
        return res;
    }
}