最低时间复杂度是O(N^3) ?
/*
* @lc app=leetcode id=18 lang=cpp
*
* [18] 4Sum
*/
// @lc code=start
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
int N = nums.size();
vector<vector<int>> ans;
if(N<4) return ans;
sort(nums.begin(),nums.end());
for(int i=0;i<N;i++){
for(int j=i+1;j<N;j++){
int p = j + 1;
int q = N - 1;
while(p < q){
int sum = nums[i] + nums[j] + nums[p] + nums[q] - target;
if(sum > 0){
q--;
}else if(sum < 0){
p++;
}else{
vector<int> t = {nums[i],nums[j],nums[p],nums[q]};
ans.push_back(t);
int a = nums[p];
int b = nums[q];
p++;q--;
while( p<q && nums[p] == a) p++;
while( p<q && nums[q] == b) q--;
}
}
while( j+1<N && nums[j+1] == nums[j]) j++;
}
while( i+1<N && nums[i+1] == nums[i]) i++;
}
return ans;
}
};
// @lc code=end