给定一个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) { int size = A.size(); if(size == 0 || n <= 0){ return 0; }//if // 排序 sort(A.begin(),A.end()); // int count = 0; for(int i = 0,j = n - 1;i < j;){ int s = A[i] + A[j]; if(s == sum){ // 3 3 3这种情况 if(A[i] == A[j]){ int x = j-i+1; count += x*(x-1)/2; break; }//if // 2 2 3 4 4 4这种情况 else{ int k = i+1; while(k <= j && A[i] == A[k]){ ++k; }//while int k2 = j-1; while(k2 >= i && A[j] == A[k2]){ --k2; }//while count += (k-i)*(j-k2); i = k; j = k2; }//else }//if else if(s < sum){ ++i; }//else else{ --j; }//else }//for return count; } };
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题