struct _Two
{
int i;
int j;
};
struct _Three: public _Two
{
int k;
};
void TwoSum(int *arr, int start, int end, int firstvalue, int target, vector<_Three> &result)
{
map<int, int> testMap;
for(int i=start; i < end; ++i)
{
int temp = target - arr[i];
if(testMap.find(temp) != testMap.end())
{
printf("1:%d 2:%d %d,%d\n",firstvalue, target, arr[i], temp);
_Three three;
three.i = temp;
three.j = arr[i];
three.k = firstvalue;
result.push_back(three);
}
else
{
testMap[arr[i]] = i;
}
}
return ;
}
void ThreeSum(int *arr, int len, int target, vector<_Three> &result)
{
for(int i=0; i < len; ++i)
{
int first = arr[i];
vector<_Three> retemp;
TwoSum(arr, i+1, len, first, target-first, retemp);
if(retemp.size())
{
result.insert(result.end(), retemp.begin(), retemp.end());
}
}
}
int main()
{
int testarr[] = {-1,-1,0,-2,2,1,1};
vector<_Three> result;
ThreeSum(testarr, 7, 0, result);
for(int i=0; i < result.size(); ++i)
{
printf("result:%d %d %d \n", result[i].i, result[i].j, result[i].k);
}
return 0;
}