如何使用数组来保存计数器,从而在C ++中找到整数数组的模式?

时间:2018-02-23 03:25:12

标签: c++11

我需要找到数组的模式,我的教授告诉我们使用另一个数组来保存每个数字的重复。这是我的模式功能:

int mode(int *arr, int s)
{
int num = arr[0];
int mod = num;
int modeCount[s];
int countMode = 1;

for(int count = 1; count < s; count++)
{
    if(arr[count] == num)
        modeCount[count - 1]++;
    else
    {
        if(modeCount[count] > countMode)
        {
            countMode = modeCount[count - 1];
            mod = num;
        }
    }
    num = arr[count];


}

return mod;

}

使用像{1,5,3,5}这样的阵列我的模式是3。

我还应该提一下,如果有多种模式,我不必编码不同(教授说不要担心),如果没有模式,我必须返回-1,所以这段代码是不完整的。

任何人都对如何修复我的代码并使其有效有任何想法?

1 个答案:

答案 0 :(得分:0)

如果数组的元素受s限制,你可以使用这个想法。

int mode(int* arr, int s)
{
    int count[s + 1] = {0}; // The size is s + 1, in case the elements on the array belong to the interval [0, S]

    for(int i = 0; i < s; ++i)
        count[arr[i]]++;

    int best = 0;
    int mode = -1;
    int numberOfElementsTied = 0;

    for(int i = 0; i < s; ++i)
    {
        if( count[i] > best)
        {
            best = count[i];
            mode = i;
            numberOfElementsTied = 1;
        }
        else if( count[i] == best)
        {
            numberOfElementsTied++;
        }
    }

    if(numberOfElementsTied == 1) return mode;
    else return -1;
}