使用两个指针指向两个数组。一个指向 A开头,一个指向B的末尾,利用单调性求解
#include<iostream>
using namespace std;
const int N=1e5+10;
int m,n,x;
int A[N],B[N];//两个数组
int main()
{
cin>>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]);
//数据保证唯一解的话。使用双指针遍历两个数组
int i=0,j=m-1;//j指向B最后一个位置
while(i<n&&j>=0)
{
if(A[i]+B[j]>x)j--;
else if(A[i]+B[j]<x) i++;
else break;
}
cout<<i<<' '<<j;
}