题目描述
请设计一个高效算法,找出数组中两数之和为指定值的所有整数对。
给定一个int数组A和数组大小n以及需查找的和sum,请返回和为sum的整数对的个数。保证数组大小小于等于3000。
测试样例:
[1,2,3,4,5],5,6
返回:2
class FindPair {
public:
int countPairs(vector<int> A, int n, int sum)
{
// write code here
int low=0,high=A.size()-1;
sort(A.begin(),A.end());
int cur=0;
while(low<high)
{
if(A[low]+A[high]==sum)
{
if(A[low]==A[high])
{
cur+=(high-low+1)*(high-low)/2;
low=high;
}
else
{
int n1=0,n2=0;
int s=low,e=high;
while(A[low]==A[s++])
n1++;
while(A[high]==A[e--])
n2++;
cur+=n1*n2;
low=s-1;
high=e+1;
}
}
else if(A[low]+A[high]>sum)
high--;
else
low++;
}
return cur;
}
};