每日leetcode--(15) 3SUM
阿新 • • 發佈:2019-01-31
#include <iostream> #include <vector> #include <string> #include <algorithm> #include <math.h> #include <stdio.h> #include <set> using namespace std; int my_max(int a,int b) { return a>b?a:b; } class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> R; sort(nums.begin(),nums.end()); for(int i =0;i<nums.size();i++) //the limit can be <nums.size().Because while(front<back) can limit it afterwards { int front = i+1; int back = nums.size()-1; int target = -1*nums[i]; while(front<back) { //this way to find the numbers satisy the two sum is worth to be learned int res = nums[front]+nums[back]; if(res>target) back--; else if(res<target) front++; else { vector<int> aa(3,0); aa[0] = nums[i]; aa[1] = nums[front]; aa[2] = nums[back]; R.push_back(aa); //skip the same ones while(aa[1]==nums[front])front++; while(aa[2]==nums[back])back--; } } //skip the same ones while(i+1<nums.size()&&nums[i+1]==nums[i])i++; } return R; } }; int main() { freopen("D:\\input.txt","r",stdin); int total = 0; cin>>total; while(total--) { int num = 0; cin>>num; vector<int> V; for(int i = 0;i<num;i++) { int m; cin>>m; V.push_back(m); } Solution solu; vector<vector<int> > res = solu.threeSum(V); for(int i = 0;i<res.size();i++) { for(int j = 0;j<res[i].size();j++) { cout<<res[i][j]<<','; } cout<<endl; } } return 0; }