#include <iostream>
#include <vector>
auto findMode(int array[], const int size){
int count = 1; //initializes the count
int freq[size]; //declares array to store the counts of each element in original array
freq[0] = count; //sets first element in frequency array to count
for (int pass = 1; pass < size; pass++){ //populates frequency array
if( array[pass] == array[pass-1] ){
count++;
freq[pass] = count;
}
else{
count = 1;
freq[pass] = count;
}
}
int max = 0;
for(int i = 0; i < size; i++){ //finds maximum value in frequency array
if(freq[i] > max)
max = freq[i];
}
std::vector<int> md;
int mode;
for(int a = 0; a < size; a++){ //finds value(s) in original array that correspond to maximum frequency, which will be the mode(s)
if (freq[a] == max){
mode = array[a];
md.push_back(mode); //pushes modes into vector
}
}
return md; //returns vector
}
int main(){
const int size = 9;
int array[size] = {1, 2, 2, 4, 4, 4, 5, 5, 5};
for (const auto e : findMode(array, size)) {
std::cout << e << std::endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKYXV0byBmaW5kTW9kZShpbnQgYXJyYXlbXSwgY29uc3QgaW50IHNpemUpewoKaW50IGNvdW50ID0gMTsgLy9pbml0aWFsaXplcyB0aGUgY291bnQKaW50IGZyZXFbc2l6ZV07IC8vZGVjbGFyZXMgYXJyYXkgdG8gc3RvcmUgdGhlIGNvdW50cyBvZiBlYWNoIGVsZW1lbnQgaW4gb3JpZ2luYWwgYXJyYXkgICAKZnJlcVswXSA9IGNvdW50OyAvL3NldHMgZmlyc3QgZWxlbWVudCBpbiBmcmVxdWVuY3kgYXJyYXkgdG8gY291bnQKCiAgICBmb3IgKGludCBwYXNzID0gMTsgcGFzcyA8IHNpemU7IHBhc3MrKyl7IC8vcG9wdWxhdGVzIGZyZXF1ZW5jeSBhcnJheQogICAgICAgIGlmKCBhcnJheVtwYXNzXSA9PSBhcnJheVtwYXNzLTFdICl7CiAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICBmcmVxW3Bhc3NdID0gY291bnQ7CiAgICAgICAgfSAKICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgY291bnQgPSAxOwogICAgICAgICAgICAgICAgZnJlcVtwYXNzXSA9IGNvdW50OwogICAgICAgICAgIH0KICAgIH0KCiAgICBpbnQgbWF4ID0gMDsKCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXsgLy9maW5kcyBtYXhpbXVtIHZhbHVlIGluIGZyZXF1ZW5jeSBhcnJheQogICAgICAgIGlmKGZyZXFbaV0gPiBtYXgpCiAgICAgICAgbWF4ID0gZnJlcVtpXTsKICAgIH0KCiAgICBzdGQ6OnZlY3RvcjxpbnQ+IG1kOwogICAgaW50IG1vZGU7CgogICAgZm9yKGludCBhID0gMDsgYSA8IHNpemU7IGErKyl7IC8vZmluZHMgdmFsdWUocykgaW4gb3JpZ2luYWwgYXJyYXkgdGhhdCBjb3JyZXNwb25kIHRvIG1heGltdW0gZnJlcXVlbmN5LCB3aGljaCB3aWxsIGJlIHRoZSBtb2RlKHMpCiAgICAgICAgaWYgKGZyZXFbYV0gPT0gbWF4KXsKICAgICAgICAgICAgbW9kZSA9IGFycmF5W2FdOwogICAgICAgICAgICBtZC5wdXNoX2JhY2sobW9kZSk7IC8vcHVzaGVzIG1vZGVzIGludG8gdmVjdG9yCiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBtZDsgLy9yZXR1cm5zIHZlY3RvcgogIH0KCmludCBtYWluKCl7CiAgY29uc3QgaW50IHNpemUgPSA5OwogIGludCBhcnJheVtzaXplXSA9IHsxLCAyLCAyLCA0LCA0LCA0LCA1LCA1LCA1fTsKCiAgZm9yIChjb25zdCBhdXRvIGUgOiBmaW5kTW9kZShhcnJheSwgc2l6ZSkpIHsKICAgIHN0ZDo6Y291dCA8PCBlIDw8IHN0ZDo6ZW5kbDsgICAKICB9Cn0=