面试题 16.24. 数对和
题目
设计一个算法,找出数组中两数之和为指定值的所有整数对。一个数只能属于一个数对。
示例 1:
输入: nums = [5,6,5], target = 11
输出: [[5,6]]
示例 2:
输入: nums = [5,6,5,6], target = 11
输出: [[5,6],[5,6]]
提示:
- nums.length <= 100000
题解
public List<List<Integer>> pairSums(int[] nums, int target) {
Arrays.sort(nums);
List<List<Integer>> result = new ArrayList<>();
int start = 0, end = nums.length - 1;
// 双指针
while (start < end) {
int sum = nums[start] + nums[end];
if (sum < target) {
start++;
} else if (sum > target) {
end--;
} else {
result.add(Arrays.asList(nums[start], nums[end]));
start++;
end--;
}
}
return result;
}