|
题目描述
给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。
注意:
三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c)
解集中不能包含重复的三元组。
例如,给定的数组 S = {-1 0 1 2 -1 -4},解集为(-1, 0, 1) (-1, -1, 2)
通过代码(by孙笑川♔):
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
Arrays.sort(num);
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
ArrayList<Integer> t;
int len = num.length;
for(int i = 0; i < len - 2; i++){//len-3,len-2,len-1
if(i == 0 || num[i] != num[i-1]) {
int left = i + 1;
int right = len - 1;
while (left < right){
while (left < right && (num[i] + num[left] + num[right]) > 0) {
right--;
}
if (left < right && (num[i] + num[left] + num[right]) == 0) {
t = new ArrayList<>();
t.add(num[i]);
t.add(num[left]);
t.add(num[right]);
res.add(t);
while (left < right && num[left] == t.get(1)) {
left++;
}
} else {
left++;
}
}
}
}
return res;
}
}
|
|