15 三数之和
双指针,从左边向右边“滑”,用 Set 去重
import java.util.*;
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
if(nums.length < 3){
return new ArrayList<>();
}
Set<List<Integer>> set = new HashSet<>();
Arrays.sort(nums);
for(int i = 0; i < nums.length - 2; i++){
int l = i + 1;
int r = nums.length - 1;
while(l < r){
if(nums[i] + nums[l] + nums[r] == 0){
List<Integer> temp = new ArrayList<>();
temp.add(nums[i]);temp.add(nums[l]);temp.add(nums[r]);
set.add(temp);
l ++; r --;
}
else if(nums[i] + nums[l] + nums[r] < 0){
l ++;
}
else{
r --;
}
}
}
return new ArrayList<>(set);
}
}