(双指针) O(n)O(n)
i从 0开始 从前往后遍历
j从 m - 1开始 从后向前遍历
和纯暴力的O(n2)O(n2) 算法的区别就在于
j指针不会回退
#include<iostream>
#include<stdio.h>
#define read(x) scanf("%d",&x)
using namespace std;
const int N=1e5+10;
int n,m,k;
int a[N],b[N];
int main() {
read(n);
read(m);
read(k);
for(int i=0; i<n; i++)
read(a[i]);
for(int j=0; j<m; j++)
read(b[j]);
for(int i=0,j=m-1; i<n; i++) {
while(j>=0&&a[i]+b[j]>k)j--;
if(j>=0&&a[i]+b[j]==k)cout<<i<<' '<<j<<endl;
}
return 0;
}