本题可以用双指针算法写。
具体思路如下:
我们可以用一个循环枚举 $i$ ,先将 $j$ 设为 $m-1$,然后判断 $a_{i}+b_{j}$ 是否大于等于 $x$,如果满足条件,则 $j-=1$ .由于两个数组都是升序排列的,所以j只会递减.当 $a_{i}+b_{j}$小于 $x$ 时,就判断 $a_{i}+b_{j+1}$ 是否等于 $x$ , 是就输出.(注意判断的是 $a_{i}+b_{j+1}$ 是否等于 $x$,因为 $a_{i}+b_{j}$ 已经小于 $x$ 了)
请看代码:
#include <bits/stdc++.h>
using namespace std;
int a[100005],b[100005];
int main(){
int n,m,x;
cin>>n>>m>>x;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<m;i++){
cin>>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+1]==x) cout<<i<<' '<<j+1;
}
return 0;
}
给个点赞加关注吧