【发布时间】:2020-10-13 01:19:30
【问题描述】:
我仍然对 C++ 中 std::map 的运行时复杂性感到有些困惑。我知道下面算法中的第一个 for 循环需要 O(N) 或线性运行时间。但是,第二个 for 循环有另一个 for 循环遍历地图。这是否会增加整体运行时的复杂性?换句话说,以下算法的整体运行时复杂度是多少?是 O(N) 还是 O(Nlog(N)) 还是别的什么?
vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
vector<int> result;
map<int, int> mp;
for (int i = 0; i < nums.size(); i++) {
mp[nums[i]]++;
}
for (int i = 0; i < nums.size(); i++) {
int numElements = 0;
for (auto it = mp.begin(); it != mp.end(); it++) {
if (it->first < nums[i]) numElements += it->second;
}
result.push_back(numElements);
}
return result;
}
【问题讨论】:
-
取决于您对
map的操作。好的文档将提供其每种方法的时间复杂度。示例:en.cppreference.com/w/cpp/container/map/find#Complexity -
注意:第二个循环看起来过分了。就个人而言,我会返回
map,但如果您需要返回vector,请与您的 Rubber Duck 讨论逻辑,看看是否有更简单的方法来获得您想要的东西..
标签: c++ arrays dictionary vector runtime