一.寻找和为定值的两个数
题目:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。
我的思路:题目要求时间复杂度是O(n),所以整个数组只可以遍历一轮。针对题目中给出的实例,对于数4,我们实际上就是要找数组中可有15-4=11这个数。将原题进行这样的转化之后,很容易想到使用hash表,只需要遍历一次数组,即可根据数值在O(1)的时间得到其的存储位置。C++ STL里面封装了hash_map的实现,编写程序如下:
#include <map>
#include <iostream>
using namespace std;
map<int, int> hash_map;
void search(