我的代码片段存在问题。我想在已排序的数组中找到优势。问题是当数组中有两个或更多的支配者时,它只打印一个。我的意思是这样的情况: 数字:1,1,1,2,2,2,3,3,3,4,5< - 所以主导者应该是1,2和3.我多次尝试修复它但我想我阻止了自己起来。谁能给我一些线索?
n- number of integers, initiated by user
int t[n];
...generating random numbers, sorting...
int actuall, max, dominant, occurency;
max = 0;
for(int i = 0; i<n; i++)
{
actuall= t[i];
occurency = 0;
for(int j = 0; j<n; j++)
{
if(t[j] == actuall) occurency++;
}
if(occurency > max)
{
max = occurency;
dominant = actuall;
}
}
if(max == 1){
cout<<"\nThere is no dominant";
}
if(max > 1) {
cout << endl <<"Dominant: " << dominant <<", occurency: " << max << endl;
}
答案 0 :(得分:1)
有几种不同的方法可以做到,但几乎所有方法都要求不止一次传递数据。
这样做的一种简单方法是使用例如最小化检查每次通过所需的数据量。一个std::unordered_map
。使用容器中的值作为键,并将每个值的计数作为数据。
然后你需要在整个容器上进行一次传递以填充地图,并在地图上进行两次传递(一次用于查找最大值,另一次用于查找所有等于最大值的条目)。
是的,你需要三次通过来找到所有“支配者”,但是用你的例子,第二次和第三次传递只循环五个元素,而不是原始容器的所有十一个。
如果未对原始容器进行排序,则上述方法也适用。