在排序数组中查找支配因子
Finding dominants in sorted array
我对代码片段有问题。我想在已经排序的数组中找到主导。问题是当数组中有两个或更多支配者时,它只打印一个。我的意思是这样的情况:数字: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
。使用容器中的值作为键,并将每个值的计数用作数据。
然后,您需要对整个容器进行一次传递以填充地图,并在地图上进行两次传递(一次用于查找最大计数,一次用于查找等于最大计数的所有条目)。
是的,您需要三次传递才能找到所有"主导项",但是在您的示例中,第二次和第三次传递仅循环五个元素,而不是原始容器的所有十一个元素。
如果未对原始容器进行排序,则上述方法也有效。
相关文章:
- 查找两个排序向量中共有的元素
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- 在不进行排序的情况下查找数组中n个最小值的索引
- 选择排序以查找未排序数组中的最大数字
- 如何修复错误:使用向量查找最小值和最大值进行合并排序
- 是否有用于排序和查找 c++ 中是否已存在的值的函数?
- 查找排序的容器,其中指向元素的指针在添加/删除时不会更改
- 创建一个函数以查找数组中的重复项,而无需对C++进行排序
- 在adjacent_find中使用greater_equal在排序序列中查找等效元素
- 是否有具有对数时间插入、删除和查找(带距离)的排序数据结构
- 如何查找给定矩阵的最大排序子矩阵(按行和按列排序)
- 算法,用于查找获取排序列表所需的最小移动元素到结束步骤
- 在我的图实现中查找边的数量并执行拓扑排序
- C++ std::lower_bound() 函数来查找索引排序向量的插入点
- O(N) 查找,但在排序列表上使用 upper_bound 时进行 O(log(N)) 比较
- 在向量的排序向量中查找特定值的索引范围
- 在未排序向量中查找第 k 个最小元素(迭代)
- 在未排序的向量<int>上查找
- 如何查找排序列表的最小值、最大值、总和和平均值
- 查找排序区域中元素数量的最快方法是什么?