排序+两路查找
#include <iostream>
#include <algorithm>
using namespace std;
class Solution
{
public:
void printPairSums(int arr[], int len, int sum)
{
int first = 0;
int last = len - 1;
int s = 0;
while(first < last)
{
s = arr[first] + arr[last];
if(s == sum)
{
cout << arr[first] << " + " << arr[last] << " = " << sum << endl;
first++;
last--;
}
else if(s < sum)
{
first++;
}
else
{
last--;
}
}
}
};
int main()
{
int arr[] = {16, 5, 9, -1, 4, 6, 2, 3, -8};
int len = sizeof(arr)/sizeof(arr[0]);
sort(arr, arr+len);
Solution b;
b.printPairSums(arr, len, 8);
return 0;
}
穷举法
#include <iostream>
#include <algorithm>
using namespace std;
class Solution
{
public:
void printPairSums(int arr[], int len, int sum)
{
for(int i=0; i<len; i++)
{
for(int j=i+1; j<len; j++)
{
if(arr[i] + arr[j] == sum)
{
cout << arr[i] << " + " << arr[j] << " = " << sum << endl;
}
}
}
}
};
int main()
{
int arr[] = {1, 5, 9, -1};
int len = sizeof(arr)/sizeof(arr[0]);
Solution b;
b.printPairSums(arr, len, 8);
return 0;
}