class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
if(nums.size() < 4){
return {};
}
vector<vector<int>> result;
sort(nums.begin(), nums.end());
int temp, sum2, flag;
for(int k=0; k<nums.size()-3; k++){
if(nums[k] == nums[k-1] && k > 0){
continue;
}
flag = target - nums[k];
for(int i=k+1; i<nums.size()-2; i++){
if(nums[i] == nums[i-1] && i > k+1){
continue;
}
temp = flag - nums[i];
int left = i + 1;
int right = nums.size() - 1;
while(left < right ){
sum2 = nums[left] + nums[right];
if(sum2 == temp)
result.push_back({nums[k],nums[i],nums[left],nums[right]});
sum2 < temp ? left++ : right--;
while(nums[left] == nums[left-1] && left > i+1){
left++;
}
while(nums[right] == nums[right+1] && right < nums.size()-1){
right--;
}
}
}
}
return result;
}
};
同三数和,在外面加了一重循环,注意去重
本文深入探讨了四数之和算法的实现细节,通过在三数之和的基础上增加一层循环,有效地解决了寻找四个数相加等于特定目标值的问题。文章详细介绍了如何通过排序和双指针技巧来优化算法效率,并提供了具体的去重策略,避免重复解的出现。
8995

被折叠的 条评论
为什么被折叠?



