我试图找出如何找到未排序数组的模式,如果未排序的数组有一个模式开始,或者它有多个模式(即2,2,3, 3,4,6,7其中模式为2和3)。
我试图弄清楚如何在不事先对数组进行排序的情况下执行此操作。
目前,我有这个:
int counter = 1;
int counterTwo = 0;
int mode = array[0];
for (int i = 0; i < SIZE - 1; i++)
{
if (array[i] == array[i + 1])
{
counter++;
if (counter > counterTwo)
{
counterTwo = counter;
mode = array[i];
}
else
{
counter = 1; // Reset counter
}
}
}
cout << "\nThe mode is: " << mode << endl;
哪种工作可以帮助我确定阵列是否有多种模式。当没有模式时,它只输出数组中的第一个值。
对此有何帮助?提前谢谢。
答案 0 :(得分:1)
如果不改变你的算法,你可以做的第一次迭代来获得模式计数,然后再做一次迭代来获得重复那么多次的所有元素。
您可以使用的另一种算法是保存每个数字的直方图及其出现次数。这可以通过c ++ map
来实现,它保存了键值对数据。在归档map
时,您还可以保存模式计数,然后遍历地图以获取具有该计数的元素。
int count = 7;
int array[] = {2, 2, 3, 3, 4, 6, 7};
std::map<int, int> histogram;
int mode_count = 0;
for (int i = 0; i < count; i++) {
int element = array[i];
histogram[element]++;
mode_count = std::max(mode_count, histogram[element]);
}
for (auto element : histogram) {
if (element.second == mode_count) {
printf("%d -> %d\n", element.first, element.second);
}
}