15. 3Sum
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
//sort array to avoid duplication
Arrays.sort(nums);
List<List<Integer>> result = new LinkedList<>();
for (int i=0; i<nums.length; i++){
if(i==0 || nums[i]!=nums[i-1]){
int left = i+1, right = nums.length-1;
// two pointers
while(left<right){
// avoid duplication!
if(left!=i+1 && nums[left]==nums[left-1]){
left++;
}else if(right!=nums.length-1 && nums[right]==nums[right+1]){
right--;
}else if(nums[left]+nums[right] == -nums[i]){
// java method: Arrays.asList();
result.add(Arrays.asList(nums[left], nums[right], nums[i]));
left++;
right--;
}else if(nums[left]+nums[right]>-nums[i]){
right--;
}else{
left++;
}
}
}
}
return result;
}
}
Last updated