#include<iostream>#include<vector>usingnamespace std;intmain(){int n, m, x;
cin >> n >> m >> x;
vector<int>A(n,0);
vector<int>B(m,0);for(int i =0; i < n; i++){
cin >> A[i];}for(int i =0; i < m; i++){
cin >> B[i];}// 双指针:对于两个序列,维护某种次序bool found =false;for(int i =0; i < n; i++){for(int j =0; j < m; j++){if(A[i]+ B[j]== x){
cout << i <<" "<< j << endl;
found =true;break;// 找到匹配后终止内层循环}}if(found){break;// 找到匹配后终止外层循环}}return0;}
方法二:二分法
#include<iostream>#include<vector>usingnamespace std;intbinarySearch(vector<int>& arr,int target){//定义int不用bool,因为要返回下标int left =0;int right = arr.size()-1;while(left <= right){int mid = left +(right - left)/2;if(arr[mid]== target){return mid;}elseif(arr[mid]< target){
left = mid +1;}else{
right = mid -1;}}return-1;// 返回 -1 表示未找到}intmain(){int n, m, x;
cin >> n >> m >> x;
vector<int>A(n);
vector<int>B(m);for(int i =0; i < n; i++){
cin >> A[i];}for(int j =0; j < m; j++){
cin >> B[j];}for(int i =0; i < n; i++){int y = x - A[i];// 定义 yint j =binarySearch(B, y);if(j !=-1){
cout << i <<" "<< j << endl;}}return0;}
方法三:哈希表
#include<iostream>#include<vector>#include<unordered_map>usingnamespace std;intmain(){int n, m, x;
cin>> n >> m >> x;
vector<int>A(n,0);
vector<int>B(m,0);
unordered_map<int,int> Hash;//用于存储元素到索引的映射for(int i =0; i < n; i++){
cin>> A[i];
Hash[A[i]]= i;// 在哈希表中记录每个元素对应的索引,这里是 A[i] 到 i 的映射}for(int i =0; i < m; i++){
cin>> B[i];if(Hash.count(x - B[i])){// 如果存在 x - B[i] 这个元素// 那么输出这个元素的索引和当前元素的索引
cout<< Hash[x - B[i]]<<" "<< i << endl;}}return0;}