AcWing 800. 數組元素的目標和

網址 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 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
View Code
相關文章