class Solution {
public List<List<Integer>> fourSum(int[] nums, int target) {
Set<List<Integer>> res=new HashSet<>();
if(nums==null||nums.length<4)
return new ArrayList<>(res);
Arrays.sort(nums);
int length=nums.length;
for(int i=0;i<nums.length-3;i++)
{
if(i>0&&nums[i]==nums[i-1])
continue;
if(nums[i]+nums[i+1]+nums[i+2]+nums[i+3]>target)
{
break;
}
if(nums[i]+nums[length-1]+nums[length-2]+nums[length-3]<target)
{
continue;
}
for(int j=i+1;j<nums.length-2;j++)
{
// if(j>(i+1)||nums[j]==nums[j-1])
// continue;
int p=j+1;
int q=nums.length-1;
if(nums[i]+nums[j]+nums[p]+nums[p+1]>target)
{
break;
}
if(nums[i]+nums[j]+nums[q]+nums[q-1]<target)
{
continue;
}
while(p<q)
{
if(nums[i]+nums[j]+nums[p]+nums[q]==target)
{res.add(Arrays.asList(nums[i],nums[j],nums[p],nums[q]));
p++;
}
else if(nums[i]+nums[j]+nums[p]+nums[q]>target)
q--;
else p++;
}
}
}
return new ArrayList<>(res);
}
}
四数求和(leetcode18)
最新推荐文章于 2021-11-27 15:15:11 发布