Subject: https://leetcode-cn.com/problems/4sum/
Answer: Double pointer:
public List<List<Integer>> fourSum(int[] nums, int target) {
Arrays.sort(nums);
int n = nums.length;
List<List<Integer>> result = new ArrayList<>();
for(int i=0;i<n-3;i++){
if(i>0 && nums[i] == nums[i-1]){
continue;
}
for(int j=i+1;j<n-2;j++){
if(j>i+1 && nums[j] == nums[j-1]){
continue;
}
for(int m=j+1;m<n-1;m++){
if(m>j+1 && nums[m] == nums[m-1]){
continue;
}
int right = n-1;
int value = target-nums[i]-nums[j]-nums[m];
while (m<right && nums[right]>value){
right--;
}
if(m==right) break;
if(nums[right] == value){
List<Integer> list = new ArrayList<>();
list.add(nums[i]);
list.add(nums[j]);
list.add(nums[m]);
list.add(nums[right]);
result.add(list);
}
}
}
}
return result;
}