800. 数组元素的目标和
暴力枚举解法
#include<iostream>
using namespace std;
const int N = 1000010;
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 ; i < n ; i ++){
for(int j = 0 ; j < m ; j ++){
if(A[i] + B[j] == x){
cout << i << " "<< j << endl;
break;
}
}
}
}
双指针
#include<iostream>
using namespace std;
const int N = 1000010;
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 ++){
// i 指向头, j指向尾巴 ,a+b大于则 j--
while(j >= 0 && A[i]+B[j] > x) j--;
if(A[i]+B[j] == x){
printf("%d %d\n",i, j);
break;
}
}
return 0;
}
评论区