【发布时间】:2020-03-22 04:29:20
【问题描述】:
问题陈述
给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。
您可以假设每个输入都只有一个解决方案,并且您不能两次使用相同的元素。
问题:
我正在尝试使用哈希图来实现解决此问题的算法。这是我第一次使用哈希图,我正在学习它。我不确定为什么会收到以下错误。这个问题来自leet代码。提前谢谢你。
Line 10: Char 35: fatal error: invalid operands to binary expression ('int' and 'std::pair<const int, int>')
if((target - nums[i]) == *umap.find(key))
代码
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
// key would be the element value would be the complement
vector<int> sol;
unordered_map<int,int> umap;
for(int i=0; i<nums.size(); i++)
{
int key = nums[i];
if((target - nums[i]) == umap.find(key)) {
sol.push_back(i);
sol.push_back(umap[i]);
} else {
umap[nums[i]] = i;
cout << umap[nums[i]]<< endl;
}
}
return sol;
}
};
【问题讨论】:
-
我知道这可能看起来很挑剔,但你能用实际文本替换你的文本图像吗?它提高了问题的可搜索性,帮助使用电子阅读器的人,并且一些图像托管网站可能会被阻止(尤其是在人们的工作场所——在瘟疫时期这似乎不太可能,但仍然值得考虑)
-
umap.find() 返回无序映射的迭代器。我们无法将 int 与迭代器进行比较。试试
(target - nums[i]) == *umap.find(key)。欲了解更多信息,请查看en.cppreference.com/w/cpp/container/unordered_map -
@user5876164 我们也无法将 int 与 pair 进行比较。
-
@Nick 我认为您的代码应该包含
*umap.find(key)而不是umap.find(key),因为您的编译结果显示... -
@BessieTheCow 哎呀,我的错。然后
umap.find(key)->second可以正常工作。或者只使用umap[key]。
标签: c++ dictionary vector hashmap