【20】【哈希表】数对和

题目

设计一个算法,找出数组中两数之和为指定值的所有整数对。一个数只能属于一个数对。
示例 1:

输入: nums = [5,6,5], target = 11
输出: [[5,6]]
示例 2:

输入: nums = [5,6,5,6], target = 11
输出: [[5,6],[5,6]]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pairs-with-sum-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

收获

ans.add(Arrays.asList(num, target - num));
map.remove(target - num);
map.put(num, map.getOrDefault(num, 0) + 1);

class Solution {
    public List<List<Integer>> pairSums(int[] nums, int target) {
        //key:数组的元素;value:该元素出现的次数
        Map<Integer, Integer> map = new HashMap<>();
        
        List<List<Integer>> ans = new ArrayList<>();
        for (int num : nums) {
            Integer count = map.get(target - num);
            if (count != null) {
                ans.add(Arrays.asList(num, target - num));
                if (count == 1)
                    map.remove(target - num);
                else
                    map.put(target - num, --count);
            } else 
                map.put(num, map.getOrDefault(num, 0) + 1);
        }
        
        return ans;
    }
}

个人小站:http://jun10ng.work/ 拥抱变化,时刻斗争,走出舒适圈。
原文地址:https://www.cnblogs.com/Jun10ng/p/12416746.html