给定数组,找出数组中4个数之和为目标数的所有不重复情况。
o(n^3*logn)险过。应该有更快的方法。
int cmp(int a,int b) { return a < b; } class Solution { public: vector<vector<int> > fourSum(vector<int> &num, int target) { sort(num.begin(),num.end(),cmp); vector<vector<int>>ans; ans.clear(); if(num.size() <= 3)return ans; for(int i = 0;i < num.size()-3;i++) { for(int j = i+1;j < num.size()-2;j++) { for(int k = j+1;k < num.size()-1;k++) { int val = target - (num[i] + num[j] + num[k]); if(val >= num[k+1] && findTarget(k+1,num.size()-1,val,num)) { vector<int>item; item.clear(); item.push_back(num[i]); item.push_back(num[j]); item.push_back(num[k]); item.push_back(val); if(!checkExist(ans,item)) ans.push_back(item); } } } } return ans; }<br /> private: bool checkExist(vector<vector<int>>&ans,vector<int>&item) { for(int i = 0;i < ans.size();i++) { if(item == ans[i])return true; } return false; } bool findTarget(int left,int right,int target,vector<int>&num) { if(left > right)return false; int mid = (left + right) / 2; if(num[mid] == target)return true; else if(num[mid] > target) { return findTarget(left,mid-1,target,num); } else { return findTarget(mid+1,right,target,num); } } };