这道题的关键在于 给出的两个数组是有序数组,所以有
if(a[i]+j[k] > x) ==> a[i]+j[k+n] >x
所以我们j指针从后向前时 不需要会退 从前向后各扫一遍即可。
#include<iostream>
using namespace std;
const int N = 1e6+10;
int a[N],b[N];
int main()
{
int n,m,x;
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(a[i]+b[j]>x)
j--;
if(a[i]+b[j]==x)
printf("%d %d",i,j);
}
}