题目:设计一个算法,找出数组中两数之和为指定值的所有整数对。一个数只能属于一个数对。
示例 1:
输入: nums = [5,6,5], target = 11
输出: [[5,6]]
示例 2:
输入: nums = [5,6,5,6], target = 11
输出: [[5,6],[5,6]]
思路一:hash表
hahs用来存储数组中数据,key为值,value为这个数在数组中出现的次数。
从左到右遍历数组:
- 如果hash表中存在
target - num
这个key,就添加这对数到结果集中,并且判断这个数在左边出现的次数是否为1
1)如果为1,那么就删除这个key
2)如果不为1,那么将value - 1 - 如果hash表中不存在
target - num
这个key,那么就将当前的值放入到hash表中,等待后面需要
这样只需要一次从左到右的遍历就可以获取到了所有的数对
演示代码
public List<List<Integer>> pairSums(int[] nums, int target) {
if (nums == null || nums.length < 2) {
return new ArrayList<>();
}
List<List<Integer>> res = <