数字和
双指针写法
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N =100010;
int a[N],b[N];
int n,m,target;
int main()
{
scanf("%d%d%d",&n,&m,&target);
for (int i=0;i<n;i++) scanf("%d",&a[i]);
for (int j=0;j<m;j++) scanf("%d",&b[j]);
for (int i=0,j=m-1;i<n;i++)
{
while (j>=0&&a[i]+b[j]>target) j--;
if (a[i]+b[j]==target)
{
printf("%d %d\n",i,j);
break;
}
}
return 0;
}
循环加二分写法(借助lower_bound实现,不再手写二分了)
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N =100010;
int a[N],b[N];
int n,m,target;
int main()
{
scanf("%d%d%d",&n,&m,&target);
for (int i=0;i<n;i++) scanf("%d",&a[i]);
for (int j=0;j<m;j++) scanf("%d",&b[j]);
for (int i=0;i<n;i++)
{
int j=lower_bound(b,b+m,target-a[i])-b;
if (a[i]+b[j]==target)
{
printf("%d %d\n",i,j);
break;
}
}
return 0;
}