难度:中等。
标签:数组、哈希表、双指针。
双指针
按照【三数之和】的方法,固定两个数,多加一层循环。
正确解法:
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
int n = nums.size();
vector<vector<int>> result;
if(n < 4)return result;
sort(nums.begin(), nums.end());
if(nums[0] > 0 || nums[n - 1] < 0)return result;
int i = 0;
while(i < n - 3){
if(i != 0){
if(nums[i - 1] == nums[i]){
i++;
continue;
}
}
int j = i + 1;
while(j < n - 2){
if(j != i + 1){
if(nums[j - 1] == nums[j]){
j++;
continue;
}
}
int left = j + 1, right = n - 1;
while(left < right){
int temp = nums[i] + nums[j] + nums[left] + nums[right];
if(temp > target)right--;
else if(temp < target)left++;
else{
result.push_back({nums[i], nums[j], nums[left], nums[right]});
left++;
while(left < n - 1 && nums[left] == nums[left - 1])left++;
right--;
while(right > 0 && nums[right] == nums[right + 1])right--;
}
}
j++;
}
i++;
}
return result;
}
};
可以再设置一些条件使得代码更快些。
哈希表
- 枚举两个数,剩下两个数用hash来查找
- 枚举三个数,剩下一个数用hash来查找
可参考https://leetcode-cn.com/problems/4sum/solution/ha-xi-biao-de-on2he-on3fang-fa-by-loyx/