三数之和
程序员文章站
2022-07-14 08:06:12
...
一开始用的递归做的,然后,,,,,,超时了????
好吧,看了提示,说是双指针,那就做一下????,晚上宿舍聚餐去喽!!!
import java.util.*;
class Solution{
List<List<Integer>> res = new LinkedList<>();
Set<LinkedList<Integer>> set = new HashSet<>();
public List<List<Integer>> threeSum(int[] nums) {
// 不满足要求,直接返回
if(nums.length <= 2){
return res;
}
// 先排序
Arrays.sort(nums);
// 两个指针,初始化
int i = 1;
int j = nums.length-1;
List<Integer> ls = new LinkedList<>();
int index = 0;
// pre先从0开始,i、j走
int pre = nums[index];
while(i < j){
while(i < j){
// 满足条件
if(pre + nums[i] + nums[j] == 0){
ls.add(pre);
ls.add(nums[i]);
ls.add(nums[j]);
set.add(new LinkedList<>(ls));
// res.add(new LinkedList<>(ls));
ls.clear();
// pre = nums[i];
i++;
j--;
continue;
}
// 走位
if(pre + nums[i] + nums[j] < 0){
i++;
continue;
}
// 走位
if(pre + nums[i] + nums[j] > 0){
j--;
}
}
// pre去下一个,i、j走
index += 1;
pre = nums[index];
// i、j初始化
i = index + 1;
j = nums.length - 1;
}
for(List<Integer> lls: set){
res.add(lls);
}
return res;
}
public static void main(String[] args) {
Solution s = new Solution();
int nums[] = new int[]{-2,-1,0,1,2,3};
s.threeSum(nums);
}
}
上一篇: 按序打印