您的位置:首页 > 其它

leetcode@ [18]4Sum

2015-10-08 21:09 357 查看
struct quadruplet{
int a,b,c,d;
quadruplet() {}
quadruplet(int aa,int bb,int cc,int dd){
this->a=aa; this->b=bb; this->c=cc; this->d=dd;
}
bool operator<(const quadruplet& t)const{
if((a-t.a<0)||(a==t.a&&b<t.b)||(a==t.a&&b==t.b&&c<t.c)||(a==t.a&&b==t.b&&c==t.c&&d<t.d)) return true;
return false;
}
};
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());

vector<vector<int> > ans; ans.clear();
if(nums.size()<=3) return ans;

int cntAns=0;
vector<int> tmp(4);  tmp.clear();
set<quadruplet> st; st.clear();

int left,right,sum;

for(int i=0;i<=nums.size()-4;i++){
for(int j=i+1;j<=nums.size()-3;j++){
left=j+1;
right=nums.size()-1;
while(left<right){
sum=nums[i]+nums[j]+nums[left]+nums[right];
if(sum==target){
tmp.push_back(nums[i]); tmp.push_back(nums[j]);
tmp.push_back(nums[left]); tmp.push_back(nums[right]);
sort(tmp.begin(),tmp.end());

quadruplet quad=quadruplet(tmp[0],tmp[1],tmp[2],tmp[3]);
if(!st.count(quad)){
st.insert(quad);
ans.resize(++cntAns);
ans[cntAns-1]=tmp;
}
tmp.clear();

right--; left++;
}
else if(sum>target) right--;
else left++;
}
}
}

return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: