码迷,mamicode.com
首页 > 编程语言 > 详细

AcWing 800. 数组元素的目标和

时间:2019-05-18 18:49:48      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:联系   i++   color   close   数字   哈希   int   code   cout   

网址 https://www.acwing.com/solution/AcWing/content/2064/

题目描述
给定两个升序排序的有序数组A和B,以及一个目标值x,请你求出满足A[i] + B[j] = x的数对(i, j)。

数据保证有唯一解。

输入格式
第一行包含三个整数n,m,x,分别表示A的长度,B的长度以及目标值x。

第二行包含n个整数,表示数组A。

第三行包含m个整数,表示数组B。

输出格式
共一行,包含两个整数 i 和 j。

数据范围
数组长度不超过1000000。
同一数组内元素各不相同。
1≤数组元素≤109

样例
输入样例:

4 5 6
1 2 4 7
3 4 6 8
输出样例:

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

 

AcWing 800. 数组元素的目标和

标签:联系   i++   color   close   数字   哈希   int   code   cout   

原文地址:https://www.cnblogs.com/itdef/p/10886604.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!