原题链接

使用两个指针,i 指针放在 A 数组开头,j 指针放在 B 数组末尾,每次比较 A[i] + B[j] 与目标值的大小,如果大,就 j–,如果小就 i++。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
using namespace std;

const int N = 100010;

int a[N];
int b[N];
int n,m,x;
int main() {
cin >> n >> m >> x;
for(int i=0;i<n;i++) {
cin >> a[i];
}
for(int i=0;i<m;i++) {
cin >> b[i];
}
int i,j;
for(i=0,j=m-1;i<n&&j>=0;) {
if(a[i]+b[j] < x) {
i++;
} else if (a[i]+b[j] > x) {
j--;
} else {
cout << i << " " << j;
break;
}
}
return 0;
}