4Sum
来源:互联网 发布:上海心动网络怎么样 编辑:程序博客网 时间:2024/06/05 18:10
struct Node{int val;int num1;int num2;};bool cmp(const Node& n1,const Node& n2){ if(n1.val!=n2.val) { return n1.val<n2.val; } if(n1.num1!=n2.num1) { return n1.num1<n2.num1; } return n1.num2<n2.num2;}class Solution {private: int lowerBound(int start,int end,int target,const vector<Node>& nodes) { while(start<end) { int mid=start+(end-start)/2; if(nodes[mid].val>=target) { end=mid; } else { start=mid+1; } } return start; } int upperBound(int start,int end,int target,const vector<Node>& nodes) { while(start<end) { int mid=start+(end-start)/2; if(nodes[mid].val>target) { end=mid; } else { start=mid+1; } } return start; } bool isValid(int i1,int i2,int j1,int j2) { if(i1==j1) { return false; } if(i1==j2) { return false; } if(i2==j1) { return false; } if(i2==j2) { return false; } return true; } vector<Node> nodes;public: vector<vector<int> > fourSum(vector<int> &num, int target) { for(int i=0;i<num.size();++i) { for(int j=i+1;j<num.size();++j) { Node node; node.val=num[i]+num[j]; node.num1=i; node.num2=j; nodes.push_back(node); } } sort(nodes.begin(),nodes.end(),cmp); set<vector<int> > res; for(int i=0;i<((int)nodes.size()-1);++i) { int lower=lowerBound(i+1,nodes.size(),target-nodes[i].val,nodes); int upper=upperBound(i+1,nodes.size(),target-nodes[i].val,nodes); if((lower!=-1)&&(upper!=-1)) { for(int j=lower;j<upper;++j) { if(isValid(nodes[i].num1,nodes[i].num2,nodes[j].num1,nodes[j].num2)) { vector<int> tmp; tmp.push_back(num[nodes[i].num1]); tmp.push_back(num[nodes[i].num2]); tmp.push_back(num[nodes[j].num1]); tmp.push_back(num[nodes[j].num2]); sort(tmp.begin(),tmp.end()); res.insert(tmp); } } } } return vector<vector<int> >(res.begin(),res.end()); }};
0 0
- 【Leetcode】4Sum (Sum)
- leetcode 2 sum 3sum 4sum
- 3Sum 3Sum Closest 4Sum
- 3Sum & 3Sum Closest & 4Sum
- 2Sum 3Sum 4Sum
- 3sum、3Sum closet、 4sum
- 3Sum, 3Sum Closest, 4 Sum
- Leetcode 2SUM-3SUM-4SUM
- Leetcode-2sum,3sum,4sum
- leetcode 2 sum & 3 sum & 4 sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- JPA初识
- 关于data-ng-model和ng-model
- Palindrome Number
- gcc源代码分析之varasm.c
- mysql having的用法
- 4Sum
- ExtJs xtype一览表
- 文件路径个人理解
- 苹果App Store审核指南中文翻译
- String to Integer (atoi)
- Reverse Integer
- Add Two Numbers
- 程序员如何参与创业
- 使用Intel编译器SSA