思想:三数之和的变种,时间复杂度为O(n^3)
class Solution {
public List<List<Integer>> fourSum(int[] nums, int target) {
int len = nums.length;
List<List<Integer>> res = new ArrayList<>();
if(len<4) return res;
Arrays.sort(nums);
for(int i=0;i<=len-4;i++){
if(i>0&&nums[i]==nums[i-1])continue;//去重
for(int j=i+1;j<=len-3;j++){
if(j>i+1&&nums[j]==nums[j-1])continue;//去重
int left = j+1,right = len-1;
while(left<right){
int sum = nums[i]+nums[j]+nums[left]+nums[right];
if(sum==target){
res.add(Arrays.asList(nums[i],nums[j],nums[left],nums[right]));
while(left<right&&nums[left+1]==nums[left]){
left++;
}
while(right>left&&nums[right-1]==nums[right]){
right--;
}
left++;
right--;
}else if(sum<target){
left++;
}else{
right--;
}
}
}
}
return res;
}
}