1.题目描述
2.题解
双指针法
与三数之和的思路类似,无外乎对于四个数要多加一个指针,也就是多加一个循环,多进行一次去重。具体的思路见三数之和。
3.代码示例
class Solution {
public List<List<Integer>> fourSum(int[] nums, int target) {
List<List<Integer>> result=new ArrayList<>();
Arrays.sort(nums);
for(int k=0;k<nums.length;k++){
if(nums[k]>0&&nums[k]>target) break;
if(k>0&&nums[k]==nums[k-1]) continue;//对nums[k]去重
for(int i=k+1;i<nums.length;i++){
if(i>k+1&&nums[i]==nums[i-1]) continue;//对nums[i]去重
int left=i+1,right=nums.length-1;
while(right>left){
int sum=nums[k]+nums[i]+nums[left]+nums[right];
if(sum>target) right--;
else if(sum<target) left++;
else{
result.add(Arrays.asList(nums[k],nums[i],nums[left],nums[right]));
while(right>left&&nums[right]==nums[right-1]) right--;//对nums[right]去重
while(right>left&&nums[left]==nums[left+1]) left++;//对nums[left]去重
right--;
left++;
}
}
}
}
return result;
}
}