题目
设计一个算法,找出数组中两数之和为指定值的所有整数对。一个数只能属于一个数对。
示例 1:
输入: nums = [5,6,5], target = 11
输出: [[5,6]]
1
2
2
示例 2:
输入: nums = [5,6,5,6], target = 11
输出: [[5,6],[5,6]]
1
2
2
提示:
nums.length <= 100000
-10^5 <= nums[i], target <= 10^5
题解
java
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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22