AcWing 800. 数组元素的目标和
网址 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数组的索引 + 空格 + 当前数字的索引
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
![阿里打赏](https://files.cnblogs.com/files/itdef/ali2.bmp)
![微信打赏](https://files.cnblogs.com/files/itdef/weixin2.bmp)