给定一个向量vec ,任务是使用映射找到 vec的每个元素的频率。
例子:
Input: vec = {1, 2, 2, 3, 1, 4, 4, 5}
Output:
1 2
2 2
3 1
4 2
5 1
Explanation:
1 has occurred 2 times
2 has occurred 2 times
3 has occurred 1 times
4 has occurred 2 times
5 has occurred 1 times
Input: v1 = {6, 7, 8, 6, 4, 1}
Output:
1 1
4 1
6 2
7 1
8 1
Explanation:
1 has occurred 1 times
4 has occurred 1 times
6 has occurred 2 times
7 has occurred 1 times
8 has occurred 1 times
方法:
我们可以使用给定的四个步骤有效地找到向量中元素的频率:
- 遍历给定向量vec的元素。
- 检查当前元素是否存在于地图中。
- 如果存在,则更新当前元素的频率,否则插入频率为 1 的元素,如下所示:
- 遍历地图并打印存储为映射值的每个元素的频率。
下面是上述方法的实现:
CPP
#include
using namespace std;
void printFrequency(vector vec)
{
// Define an map
map M;
// Traverse vector vec check if
// current element is present
// or not
for (int i = 0; vec[i]; i++) {
// If the current element
// is not found then insert
// current element with
// frequency 1
if (M.find(vec[i]) == M.end()) {
M[vec[i]] = 1;
}
// Else update the frequency
else {
M[vec[i]]++;
}
}
// Traverse the map to print the
// frequency
for (auto& it : M) {
cout << it.first << ' '
<< it.second << '\n';
}
}
// Driver Code
int main()
{
vector vec = { 1, 2, 2, 3, 1, 4, 4, 5 };
// Function call
printFrequency(vec);
return 0;
}
1 2
2 2
3 1
4 2
5 1
复杂度分析:
时间复杂度: O(n log n)
对于给定的大小为 n 的向量,我们对其进行一次迭代,在地图中搜索元素的时间复杂度为 O(log n)。所以时间复杂度是 O(n log n)
空间复杂度: O(n)
对于大小为 n 的给定向量,我们使用了一个额外的映射,该映射最多可以有 n 个键值,因此空间复杂度为 O(n)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live