STL之unordered_map
关联容器:unordered_map详细介绍
看这个,基本就够用了。
粘一个力扣编程题:给定一个数组nums和一个整数目标值target,请在数组中找到和为目标值的两个整数,返回它们的数组下标。你可以假设每种输入只会对应一个答案,但是数组中同一个元素不能使用两边。
看到这个我想到暴力破解的办法,但是暴力破解时间复杂度比较高,原因在于在寻找target-x的时间复杂度高,所以使用哈希表来快速寻找数组中的目标元素,我们先创建一个哈希表,对于每一个x,查找哈希表中是否存在target-x,然后将x插入到哈希表,确保不会和自己匹配到。
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> hashtable;
for (int i = 0; i < nums.size(); ++i) {
auto it = hashtable.find(target - nums[i]);
if (it != hashtable.end()) {
return { it->second, i }; // 返回元素target-x 的下标与 x 的下标
}
hashtable[nums[i]] = i; // 没有找到target-x,就把x放进表,及它的下标
}
return {};
}
};
int main()
{
vector<int> nums = { 2,7,11,15 },sul;
Solution obj;
sul = obj.twoSum(nums, 9);
for (int val : sul)
cout << val << " ";
cout << endl;
}