C++ 查找未排序数组的模式,以及该数组是否有多个模式或无模式

C++ 查找未排序数组的模式,以及该数组是否有多个模式或无模式,c++,arrays,nested-loops,C++,Arrays,Nested Loops,我试图弄清楚如何找到未排序数组的模式,如果该未排序数组有一个模式开始,或者它有多个模式(即模式为2和3的2,2,3,3,4,6,7) 我正在试图弄清楚如何在不排序数组的情况下进行此操作 目前,我有: int counter = 1; int counterTwo = 0; int mode = array[0]; for (int i = 0; i < SIZE - 1; i++) { if (array[i] == array[i + 1]) { cou

我试图弄清楚如何找到未排序数组的模式,如果该未排序数组有一个模式开始,或者它有多个模式(即模式为2和3的2,2,3,3,4,6,7)

我正在试图弄清楚如何在不排序数组的情况下进行此操作

目前,我有:

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;
int计数器=1;
int counterTwo=0;
int模式=数组[0];
对于(int i=0;i计数器2)
{
计数器2=计数器;
模式=阵列[i];
}
其他的
{
计数器=1;//重置计数器
}
}
}

cout在不改变算法的情况下,您可以做的一件事是先进行第一次迭代以获得模式计数,然后再进行另一次迭代以获得重复该次数的所有元素

您可以使用的另一种算法是保存每个数字及其出现次数的直方图。这可以通过C++ <代码> map < /COD>实现,它节省了键值对数据。在归档
映射时
,还可以保存模式计数,然后在映射上迭代以获取具有该计数的元素

示例代码
int计数=7;
int数组[]={2,2,3,3,4,6,7};
地图直方图;
int mode_count=0;
for(int i=0;i%d\n”,element.first,element.second);
}
}
使用该功能。
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);
  }
}