class Solution {
public List<List<Integer>> fourSum(int[] nums, int target) {
Arrays.sort(nums);
List<List<Integer>> ans = new ArrayList<>();
int n = nums.length;
if(n<4){
return ans;
}
int l,m;
for(int i = 0;i<=n-4;i++){
if(i > 0 && nums[i]==nums[i-1]){
continue;
}
for(m=i+1;m<=n-3;m++){
if(m>i+1 && nums[m]==nums[m-1]){
continue;
}
l=m+1;
int r = n - 1;
while(l<r){
int sum = nums[i]+nums[l]+nums[m]+nums[r];
if(sum==target){
ans.add(Arrays.asList(nums[i],nums[l],nums[m],nums[r]));
while(l<r && nums[l]==nums[l+1]) l++;
while(l<r && nums[r]==nums[r-1]) r--;
l++;
r--;
}
else if (sum<target){
l++;
}
else if(sum>target){
r--;
}
}
}
}
return ans;
}
}