網址 https://www.acwing.com/solution/AcWing/content/2064/ios
題目描述
給定兩個升序排序的有序數組A和B,以及一個目標值x,請你求出知足A[i] + B[j] = x的數對(i, j)。面試
數據保證有惟一解。數組
輸入格式
第一行包含三個整數n,m,x,分別表示A的長度,B的長度以及目標值x。ide
第二行包含n個整數,表示數組A。spa
第三行包含m個整數,表示數組B。code
輸出格式
共一行,包含兩個整數 i 和 j。blog
數據範圍
數組長度不超過1000000。
同一數組內元素各不相同。
1≤數組元素≤109排序
樣例
輸入樣例:索引
4 5 6
1 2 4 7
3 4 6 8
輸出樣例:leetcode
1 1
(暴力枚舉) O(n2)
暴力就不說了 兩重循環
leetcode的第一題 也是簡單 和這裏的簡單 意義徹底不同。
差異大概就是學生面試和竟賽圈的區別吧
可是咱們能夠一遍哈希法
輸入A組的時候 哈希表記錄數值和數值所在數組的索引
在輸入B數組的時候 輸入一個值 直接計算須要查找的值 也就是 X-input
若是存在這裏值 打印這個值在A數組的索引 + 空格 + 當前數字的索引
1 #include <unordered_map> 2 #include <iostream> 3 #include <vector> 4 #include <set> 5 6 using namespace std; 7 8 int n,m,x; 9 unordered_map<int,int> ma; 10 unordered_map<int,int> mb; 11 12 int main() 13 { 14 scanf("%d %d %d",&n,&m,&x); 15 int t; 16 for(int i = 0;i <n;i++){ 17 scanf("%d",&t); 18 ma[t] = i; 19 } 20 21 for(int i = 0;i <m;i++){ 22 scanf("%d",&t); 23 int find = x-t; 24 if(ma.count(find) != 0){ 25 cout << ma[find] << " " << i << endl; 26 } 27 } 28 29 30 31 return 0; 32 } 33 34 做者:defddr 35 連接:https://www.acwing.com/solution/AcWing/content/2064/ 36 來源:AcWing 37 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。