首页 > 解决方案 > 查找数组 C++ 中出现次数最多的元素

问题描述

我需要找到数组 C++ 中出现次数最多的元素。我的代码总是返回 0。

p/s:此函数应分析数组以找到数组中出现次数最多的值。您不必考虑双模态的出现,因此第一个模态值足以满足此函数定义。

#include <iostream>
#include <ctime>
#include <random>
using namespace std;
int* generateArray(int size);
int findMode(int* arr, int size);
default_random_engine eng(static_cast<unsigned>(time(0)));
uniform_int_distribution<int>randNum(0,20);

int main()
{
    // random 500 number for array coding

    int SIZE = 20;
    int* array = generateArray(SIZE); //output of 501 random element from 10-100
    cout << endl;
    findMode(array, SIZE);

    delete[] array; //delete new int [size]
    array = nullptr;
    return 0;
}
int* generateArray(int size)
{
    int* arr = new int[size];
    cout << "Random number of 501 elements: " << endl;
    cout << setw(6);
    for (int i = 0; i < size; i++) //loop
    {
        arr[size] = randNum(eng);
        cout << arr[size] << " ";
    }

    return arr; //return to array
}

int findMode(int* arr, int size)
{
    int max_count = 0;
    cout << "\nMost occurred number: ";
    for (int i = 0; i < size; i++) {
        int count = 1;
        for (int j = i + 1; j < size; j++)
            if (arr[i] == arr[j])
                count++;
        if (count > max_count)
            max_count = count;
        if (count == max_count)
            cout << arr[i] << endl;
    }
    return 0;
}

标签: c++arrayspointers

解决方案


如下修改 generateArray() 及其调用,应该更改 for 循环。

void generateArray(int* arr, int size)
{

    cout << "Random number of 501 elements: " << endl;
    cout << setw(6);
    for (int i = 0; i < size; i++) //loop
    {
        arr[i] = randNum(eng);
        cout << arr[i] << " ";
    }
}

为便于理解,修改了以上功能。arr[size] th 元素超出了数组的范围。您正在设置相同的值并尝试使用它。那应该是数组的索引。使用索引变量 - i 如上所示。

int main()
{
    // random 500 number for array coding

    int SIZE = 20;
    int* arr = new int[SIZE];
    generateArray(arr, SIZE); //output of 501 random element from 10-100
    cout << endl;
    findMode(arr, SIZE);

    delete[] arr; //delete new int [size]
    arr = nullptr;
    return 0;
}

推荐阅读