题目
设计一个算法,找出数组中两数之和为指定值的所有整数对。一个数只能属于一个数对。
示例 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;
}
}