在排序数组中查找支配因子

Finding dominants in sorted array

本文关键字:查找 排序 数组      更新时间:2023-10-16

我对代码片段有问题。我想在已经排序的数组中找到主导。问题是当数组中有两个或更多支配者时,它只打印一个。我的意思是这样的情况:数字: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;
 }

有几种不同的方法可以做到这一点,但几乎所有方法都需要多次传递数据。

一种简单的方法,也可以最大限度地减少检查每次传递所需的数据量,例如使用std::unordered_map。使用容器中的值作为键,并将每个值的计数用作数据。

然后,您需要对整个容器进行一次传递以填充地图,并在地图上进行两次传递(一次用于查找最大计数,一次用于查找等于最大计数的所有条目)。

是的,您需要三次传递才能找到所有"主导项",但是在您的示例中,第二次和第三次传递仅循环五个元素,而不是原始容器的所有十一个元素。

如果未对原始容器进行排序,则上述方法也有效。