题目描述:从一个未排序的数组中,输出两个和为target值的数字的索引。假设只存在一组这样的数字。
题目解析:
这道题很容易想到用hash表去解决。将数组中的每一个数字作为hash表的key,对应的value是其索引(因为最后要求输出的是索引)。如果出现了target-nums[i]在hash表中存在的情况,就说明此时的nums[i]和hash[target-nums[i]]的和为target,这时做一个输出即可。
C++中,hash对应STL中的unordered_map,是通过hash函数实现的,而set和map都是通过红黑树去实现的。
需要用到查找函数:find()
与其他容器当中的find方法相同,参数内容可以是迭代器,也可以是key值。
返回内容为迭代器,如果查找内容不存在,则返回迭代器尾部。
代码(C++实现)
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> hash;
for(int i = 0; i < nums.size();i++)
{
if(hash.find(target-nums[i])!=hash.end())
return {hash[target-nums[i]],i};
hash[nums[i]]=i;
}
}