所以两天前我进行了一次面试,他们用coderPad.io进行面试,这在求职面试中很常见。事实上,我还有另一个使用coderPad的面试,所以我真的需要问这个问题。
从本质上讲,我的算法写得很正确。我的面试官告诉我的。然而,哈希图不起作用,我们开始调试,直到面试官累了,在那里结束了面试。一天后,我收到了一封拒绝信。然而,面试官确实把它缩小到了散列图上的插入函数。我们尝试了不同的插入方式,但现在仍然有效。
我必须编写一个算法,它需要我为向量中的每个整数元素找到频率。但是,当我打印散列映射的内容时,每个元素的频率总是1,而不是每个元素的频率1。这使我不得不继续进行面试。刚才我在coderPad上重新创建了算法,现在也出现了同样的问题。以下是代码:
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
// To execute C++, please define "int main()"
class hashMapTester {
public:
hashMapTester() {
}
unordered_map<int, int> collectMap(vector<int>& arr) {
unordered_map<int, int> map;
for (long unsigned int i = 0; i < arr.size(); i++) {
if (map.find(arr[i]) != map.end()) {
auto freq = map.find(arr[i])->second;
freq++;
map.insert(pair<int, int> (arr[i], freq));
} else {
map.insert(pair<int, int>(arr[i], 1));
}
}
return map;
}
void printMap(unordered_map<int, int> map, vector<int>& arr) {
for (const auto& iter : map) {
cout << iter.second << endl;
}
}
};
int main() {
vector<int> arr = {1, 2, 2, 3 , 4 , 4, 4};
hashMapTester hM;
unordered_map<int, int> map = hM.collectMap(arr);
hM.printMap(map, arr);
return 0;
}
为什么地图的频率部分总是输出1,而它不应该输出1?我被困在这件事上,我真的需要明白为什么。当我在LeetCode或其他编译器上使用此算法时,它可以工作,但不适用于CoderPad。有人能帮帮我吗?要让它在CoderPad上工作,我需要做些什么?
发布于 2022-11-04 14:20:53
按照地图/插入,insert
方法“将元素插入到容器中,如果容器尚未包含具有等效键的元素”。
下一节中对insert
的调用实际上不会更改unordered_map
的内容。
if (map.find(arr[i]) != map.end()) {
auto freq = map.find(arr[i])->second;
freq++;
map.insert(pair<int, int> (arr[i], freq)); // <<-- here
}
选项1:使freq
成为引用
if (map.find(arr[i]) != map.end()) {
auto& freq = map.find(arr[i])->second;
freq++;
}
选项2:简化算法,
unordered_map<int, int> collectMap(const vector<int>& arr) {
unordered_map<int, int> map;
for (int val : arr) {
++map[val];
}
return map;
}
发布于 2022-11-04 14:17:18
https://stackoverflow.com/questions/74318341
复制相似问题