18. 4Sum
class Solution {
public List<List<Integer>> fourSum(int[] nums, int target) {
Arrays.sort(nums);
List<List<Integer>> result = new LinkedList<>();
// remember:i<nums.length-3
for(int i=0; i<nums.length-3; i++){
if(i==0 || nums[i]>nums[i-1]){
for(int j=i+1; j<nums.length-2; j++){
if(j==i+1 || nums[j]>nums[j-1]){
int left = j+1, right=nums.length-1;
while(left<right){
if(left>j+1 && nums[left]==nums[left-1]){
left++;
}else if (right<nums.length-1 && nums[right]==nums[right+1]){
right--;
}else{
int sum = nums[i]+nums[j]+nums[left]+nums[right];
if(sum==target){
result.add(Arrays.asList(nums[i], nums[j], nums[left],nums[right]));
left++;
right--;
}else if(sum>target){
right--;
}else{
left++;
}
}
}
}
}
}
}
return result;
}
}
Last updated