排序+双头搜索,注意去重
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> ans = new ArrayList<>();
Arrays.sort(nums);
int n = nums.length;;
for(int i = 0 ; i < n - 2 ; ++i)
{
if(i > 0 &&nums[i] == nums[i -1])
continue;
int s = i + 1 , e = n -1;
while (s < e)
{
if(nums[s] + nums[e] == -nums[i])
{
if(s > i + 1 && nums[s] == nums[s -1])
{
s++;
continue;
}
List<Integer> temp = new ArrayList<>();
temp.add(nums[i]);
temp.add(nums[s]);
temp.add(nums[e]);
s++;
e--;
ans.add(temp);
}
else if(nums[s] + nums[e] < -nums[i])
{
s++;
}
else
e--;
}
}
return ans;
}
}