题目链接;
1.力扣
2.力扣
3.力扣
思路:将数组排序,然后是循环+双指针
这里展示四数之和的代码。
class Solution {
public List<List<Integer>> fourSum(int[] nums, int target) {
List<List<Integer>> ans= new ArrayList<List<Integer>>();
int len = nums.length;
Arrays.sort(nums);
for(int first=0;first<len-3;++first){
if(first>0&&nums[first]==nums[first-1]){
continue;
}
for(int second=first+1;second<len-2;++second){
if(second>first+1&&nums[second]==nums[second-1]){
continue;
}
int left=second+1;
int right=len-1;
while(left<right){
if(left>second+1&&nums[left]==nums[left-1]){
left++;
continue;
}
if(right<len-1&&nums[right]==nums[right+1]){
right--;
continue;
}
int sum=nums[first]+nums[second]+nums[left]+nums[right];
if(sum==target){
List<Integer> a= new ArrayList<Integer>();
a.add(nums[first]);
a.add(nums[second]);
a.add(nums[left]);
a.add(nums[right]);
ans.add(a);
}
if(sum>target){
right--;
}else{
left++;
}
}
}
}
return ans;
}
}
这个性能有点差,看了评论区,大佬太多了。