数组元素的目标和
![](https://i-blog.csdnimg.cn/blog_migrate/bb81ef342242687dbf91657ca3f29a51.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c5a87de397e4870e90d4c9c374e283f1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9b3ef9701e419745aac372d5dbb7ad25.png)
A和B数组都是具有单调性的数组
时间复杂度O(N+M)
让i一开始指向A的第一个数,j指向B的最后一个数,找到AI+Bj>x的数,之后j--,当找到Ai+Bj=x的数就可以break(因为是升序数组,A增大,B就要--,这样才能找到AI+Bj=x)
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 100010;
int n, m,x;
int a[N], b[N];
int main()
{
scanf("%d%d%d", &n, &m, &x);
for (int i = 0; i < n; i++) scanf("%d", &a[i]);
for (int i = 0; i < m; i++) scanf("%d", &b[i]);
for (int i = 0, j = m - 1; i < n; i++)
{
while (j>=0&&a[i] + b[j] > x)
{
j--;
}
if (a[i] + b[j] == x) printf("%d %d\n", i, j);
}
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/135967585aea8fc6e2c370ff71203116.png)