import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param breeds int整型一维数组
     * @param target_sum int整型
     * @return int整型
     */
    public int countMatchingPairs (int[] breeds, int target_sum) {
        // write code here
        Map<Integer, Integer> map = new HashMap<>();
        int amount = 0;
        for (int breed : breeds) {
            if (map.containsKey(target_sum - breed)) {
                amount++;
                if (map.get(target_sum - breed) == 1) {
                    map.remove(target_sum - breed);
                } else {
                    map.put(target_sum - breed, map.get(target_sum - breed) - 1);
                }
            } else {
                map.put(breed, map.getOrDefault(breed, 0) + 1);
            }
        }
        return amount;
    }
}

本题考察的知识点是哈希表的应用,所用编程语言是java。

我们以数组每个值作为键值,数组相同数的个数作为对应值,然后每次判断是否存在键值为target_sum-breed,如果存在则匹对数量加一,并判断对应重复的个数有多少个,如果只有一个则删除相应的键值,如果有多个,则相对应的值减一。