C++ unordered_map容器
unordered_map<int ,int> hash;
<key,value>
hash.find(key)
返回对应的迭代器,否则返回hash.end()
hash.emplace(key,value)
力扣第一题 两数之和
最开始的代码,先把target-nums[i]加入,在判断,但出现自己和自己相加为target的问题
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int ,int> hash;
for(int i =0;i<nums.size();i++)
{
hash.emplace(target-nums[i],i);
}
for(int i =0;i<nums.size();i++)
{
if(hash.find(nums[i])!=hash.end()&&i!=hash.find(nums[i])->second)
return {i,hash.find(nums[i])->second};
}
return {};
}
};
之后想到,两个数必定是一前一后地出现,可以先判断,在把数加入,防止和自己比较。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int ,int> hash;
for(int i =0;i<nums.size();i++)
{
if(hash.find(nums[i])!=hash.end())
return {i,hash.find(nums[i])->second};
hash.emplace(target-nums[i],i);
}
return {};
}
};