题目链接:https://leetcode.com/problems/4sum/
这个题目与LeetCode--15. 3Sum何其相似,可以用相似的解法来做,使用双指针法:先固定两个数,再在中间使用双指针法进行搜索。最需要注意的固定两个数的索引范围和双指针的索引范围,一定要抠清楚。代码如下:
class Solution {
public List<List<Integer>> fourSum(int[] nums, int target) {
ArrayList<List<Integer>> ret=new ArrayList<>();
Arrays.sort(nums);
for(int i=0;i+3<nums.length;i++)
{
if(i>0 && nums[i]==nums[i-1])
continue;
for(int j=nums.length-1;j-3>=i;j--)
{
if(j<nums.length-1 && nums[j]==nums[j+1])
continue;
int target1=target-(nums[j]+nums[i]);
int lo=i+1,hi=j-1;
while(lo<hi)
{
if(nums[lo] + nums[hi] == target1)
{
ret.add(Arrays.asList(nums[i],nums[lo],nums[hi],nums[j]));
lo++;
hi--;
while(lo<hi && nums[lo]==nums[lo-1])
lo++;
while(lo<hi && nums[hi]==nums[hi+1])
hi--;
}
else if(nums[lo] + nums[hi]<target1)
lo++;
else
hi--;
}
}
}
return ret;
}
}
时间复杂度