我想查找出现次数最多的元素并知道出现次数。请建议我最快的C++代码,这样做(您可以自由使用STL如果能够帮上什么忙。)最大出现次数
Q
最大出现次数
1
A
回答
1
您可以在C++中使用O(n log n)
解决此问题。
首先使用O(n log n)
排序(堆排序,合并排序,快速排序等)进行排序列表中的元素的数量。如果您不关心算法的复杂性,请使用Bubble Sort
对列表进行排序。在这种情况下,算法的复杂性将变为O(n )。
然后使用以下代码,该代码以O(n)
时间从排序列表中查找出现次数最多的元素。
maxfreq=0;
freq=1;
for(i=0;i<(MAX-1);i++)
{
if(list[i]==list[i+1])
{
freq++;
if(freq > maxfreq)
{
maxfreq=freq;
maxind=i;
}
}
else
{
freq=1;
}
}
cout<<"Element "<<list[maxind]<<" occurs "<<maxfreq<<" times in the list";
总共花费的时间是O(log n + n)
。因此该算法的复杂性为O(log n)
。
3
这里是做C++ 11的一种方式:
#include <vector>
#include <map>
int most_frequent_element(std::vector<int> const& v)
{ // Precondition: v is not empty
std::map<int, int> frequencyMap;
int maxFrequency = 0;
int mostFrequentElement = 0;
for (int x : v)
{
int f = ++frequencyMap[x];
if (f > maxFrequency)
{
maxFrequency = f;
mostFrequentElement = x;
}
}
return mostFrequentElement;
}
您可以通过以下方式使用上述功能:
#include <iostream>
int main()
{
std::vector<int> v { 1, 3, 5, 6, 6, 2, 3, 4, 3, 5 };
std::cout << most_frequent_element(v);
}
这是live example。
有了细微的修改,上面的功能可以概括与任何容器(不只是std::vector
)工作:
template<typename T>
typename T::value_type most_frequent_element(T const& v)
{ // Precondition: v is not empty
std::map<typename T::value_type, int> frequencyMap;
int maxFrequency = 0;
typename T::value_type mostFrequentElement{};
for (auto&& x : v)
{
int f = ++frequencyMap[x];
if (f > maxFrequency)
{
maxFrequency = f;
mostFrequentElement = x;
}
}
return mostFrequentElement;
}
由于模板类型推演,你会调用上面的函数模板完全像你打电话原来的一个。
这是一个live example。
另外,为了获得更好的性能,您可以考虑使用C++ 11的std::unordered_map
而不是std::map
。 std::unordered_map
为插入和查找提供了分摊的O(1)复杂性。在上面的例子中,我将把它的用法作为练习。
相关问题
- 1. Java字符串数组最大最少出现次数
- 2. TSQL出现次数最少
- 3. 计数最大次数记录出现在数据库表中
- 4. 如何获得数组中数字的最大出现次数
- 5. 返回列表的最大值和出现次数的函数
- 6. Python列表最大出现次数如果
- 7. SQL,如何提取最大出现次数的条目
- 8. 如何在excel中查找值的最大出现次数?
- 9. EXCEL:返回最大值,其中数字已经出现多次
- 10. SQL:每个值的最大出现次数
- 11. 字符串匹配与最大出现次数
- 12. 获取最大出现次数的外键
- 13. 表中给定值的最大出现次数
- 14. 计算大熊猫数据帧中字符的最大出现次数
- 15. HTTPSConnectionPool超出最大重试次数
- 16. 查找出现次数最多的值
- 17. SQL选择最后一次出现的行和计数出现次数
- 18. 如何在numpy.ndarray中找到最大值的最后出现次数
- 19. 计算出现的最大数
- 20. 如何在出现两个或更多最高出现次数时输出最高出现的数组值?
- 21. 最常出现的数字的数量......找出给定数字中出现次数最多的数字
- 22. 发现出现次数
- 23. 如何统计数字每行大熊猫的出现次数最多?
- 24. SQL发现最大的相互出现
- 25. 计数出现次数[R]
- 26. Java查找次数出现的次数
- 27. CLIPS:根据出现次数找出最常见的事实
- 28. aiml - 最后一次出现的单词
- 29. 字符最后一次出现
- 30. Stata:首次出现次数,变量唯一出现次数总和
我可以建议'矢量谷歌(字符串)'?你的“问题”听起来更像是一个需求,尽管你可能没有这样想。 –
对不起,先生... –
这听起来像作业。 –