18. 四数之和(LeetCode中等)(双指针)
18. 四数之和
O(n^3)
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
vector<vector<int>> ans;
for(int i = 0; i < nums.size(); ++i){
if(i && nums[i] == nums[i-1]) continue;
for(int j = i + 1; j < nums.size(); ++j){
if(j > i + 1 && nums[j] == nums[j-1]) continue;
for(int k = j + 1, l = nums.size() - 1; k < l; ++k){
if(k > j + 1 && nums[k] == nums[k-1]) continue;
while(l - 1 > k && 0ll + nums[i] + nums[j] + nums[k] + nums[l] > target) --l;
if(0ll + nums[i] + nums[j] + nums[k] + nums[l] == target)
ans.push_back({nums[i], nums[j], nums[k], nums[l]});
}
}
}
return ans;
}
};

浙公网安备 33010602011771号