做以下注释:
正如y总所说:
双指针的题目要先找到暴力解法,然后在暴力基础上用双指针去降低它的时间复杂度
关键是找到两个指针所指向值之间的单调关系:
对于本题的单调关系:
由于A,B两个数组是单调增的,对于一个a[i],存在一个最小的b[i],使得a[i]+b[i]>x,对于
下一个ai,若要使a[i]+b[i]=x,则必须使j指针向左移动,
这就是本题的单调关系.
include[HTML_REMOVED]
using namespace std;
const int N=1e5+10;
int a[N],b[N];
int n,m,x;
int main()
{
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 (j>0 && a[i]+b[j]>x) j--;
if (a[i]+b[j]==x) printf("%d %d\n",i,j);
}
return 0;
}