方法1:
首先使用一下系统的sort函数排序,平均时间复杂度在O(n*logn)
之后遍历这个数组,避免终极暴力,所以可以在确定前两个数后利用双指针来判断
如果sum太大,则R–,否则L++
题目要求不允许有重复的结果,可以利用set容器进行去重,最后返回结果即可
感觉耗时还是有点多
class Solution {
public:
vector< vector<int> > fourSum(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
int len = nums.size();
int leftnum;
int rightnum;
int sum;
set<vector<int>> ans;
vector<int> preAns;
for(int i = 0; i < len; i++){
for(int j = i+1; j < len; j++){
leftnum = j+1;
rightnum = len-1;
while(leftnum < rightnum){
sum = nums[i] + nums[j] + nums[leftnum] + nums[rightnum];
if(sum == target){
preAns.push_back(nums[i]);
preAns.push_back(nums[j]);
preAns.push_back(nums[leftnum]);
preAns.push_back(nums[rightnum]);
ans.insert(preAns);
preAns.clear();
}
if(sum > target){
rightnum--;
}else{
leftnum++;
}
}
}
}
vector<vector<int> > newans;
set<vector<int>>::iterator it = ans.begin();
for(; it != ans.end(); it++)
newans.push_back(*it);
return newans;
}
};