思路:使用头尾指针
Java代码实现:
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
class Pair{
int x;
int y;
Pair(int xParam, int yParam){
x = xParam;
y = yParam;
}
}
public class Solution {
public static List<Pair> sum(int[] nums, int sum){
Arrays.sort(nums);
List<Pair> result = new LinkedList<Pair>();
// 使用头尾指针
int left = 0;
int right = nums.length - 1;
while(left < right){
int num1 = nums[left];
int num2 = nums[right];
if(num1 + num2 == sum){
Pair pair = new Pair(num1, num2);
result.add(pair);
while(left<right && nums[left] == nums[left+1]){
// 左指针右移
left ++;
}
left ++;
while(right > 0 && nums[right]==nums[right-1]){
// 右指针左移
right --;
}
right --;
} else if(num1 + num2 > sum){
while(right > 0 && nums[right]==nums[right-1]){
// 右指针左移
right --;
}
right --;
} else{
while(left<right && nums[left] == nums[left+1]){
// 左指针右移
left ++;
}
left ++;
}
}
return result;
}
public static void main(String[] args) {
int[] nums = {0,0,0,1,1,12,1,6,4,8,32,86,66,2,3,2,5};
List<Pair> list = Solution.sum(nums, 5);
for(Pair p: list){
System.out.println(p.x + " " + p.y);
}
}
}