Q:
Given an integer array nums, return all the triplets [nums[i], nums[j], nums[k]] such that i != j, i != k, and j != k, and nums[i] + nums[j] + nums[k] == 0.
Notice that the solution set must not contain duplicate triplets.
A: Firstly , choose one element, then use two pointers to scan the array and judge whether theses three elements satisfy the requirement.
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> res = new ArrayList<List<Integer>>();
for(int i=0;i<nums.length-2;i++){
if(nums[i]>0) break;
if(i==0 || nums[i]>nums[i-1]){
int target = -nums[i];
int left = i+1;
int right = nums.length-1;
while(left<right){
if((nums[left]+nums[right])==target){
res.add(Arrays.asList(nums[i],nums[left],nums[right]));
left++;
right--;
while(left<right && nums[left]==nums[left-1]){
left++;
}
while(left<right && nums[right]==nums[right+1]){
right--;
}
}else if((nums[left]+nums[right]) < target){
left++;
}else{
right--;
}
}
}
}
return res;
}
}