给定一个严格递增的数列和一个正整数x,使得在序列中的两个不同位置的数a,b 使它们的和为x
找出每一对正整数a,b
因为数列中的数对是相关的 所以采用two pointers 算法.
时间复杂度为O(n)
代码如下:
#include<iostream>
using namespace std;
int main()
{
int n, x;
cin >> n;
int a[1000];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
cin >> x;//待寻找的整数
int i = 0, j = n - 1;//分别令序列两端点的下标为i,j
while (i < j) {
if (a[i] + a[j] == x) {
cout << a[i] << " " << a[j]<<endl;//找到一组输出
i++; j--;//有且仅有当i右移动,j左移动才有可能a[i]+a[j]==x
}
else if (a[i] + a[j] < x) {
i++;//有且仅有当i右移动时才有可能a[i]+a[j]>=x
}
else {
j--;//有且仅有当j左移动时才有可能a[i]+a[j]<=x
}
}
return 0;
}