给定一个无序数列,和一个整数sum,求数组中的两个数a和b,使得a+b=sum。
解法:先升序排序O(n logn),再用两个游标ind1,ind2从两边开始向中间靠拢,
如果an[ind1]+an[ind2]>sum,则ind2--,否则ind1++,知道找到sum为止。最后,如果ind1==ind2,说明没找到,返回-1。
时间复杂度O(nlogn),空间复杂度O(1)
#include <iostream>
#include <assert.h>
#include <algorithm>
#include <stack>
#include <vector>
#include <assert.h>
using namespace std;
int findSumNum(int *an, int n, int sum, int &ind1, int &ind2)
{
assert(NULL !=an && n>0);
sort(an,an+n);
int p1=0, p2=n-1;
int tsum;
while (p1<p2)
{
tsum = an[p1]+an[p2];
if (tsum<sum)
{
p1++;
}
else if (tsum>sum)
{
p2--;
}else
{
ind1=p1;
ind2=p2;
return 0;
}
}
return -1; // 找不到
}
int main()
{
int a