如下图方式进行遍历。
与纯粹暴力的双重循环做法相比,j指针不会回退,代码如下
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1000010;
int n, m, x;
int a[N], b[N];
int main()
{
// 1. 按照规则输入
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]);
// 2. i从头开始, j从尾巴开始
for (int i = 0, j = m - 1; i < n; i ++)
{
// 3. 太大了,让j缩小
while (j >= 0 && a[i] + b[j] > x) j --;
// 4. 找着了
if (a[i] + b[j] == x)
{
printf("%d %d\n", i, j);
break;
}
}
return 0;
}```