Я пытаюсь написать программу, которая принимает на вход n целых чисел и находит ту, которая встречается максимальное количество раз в данном входе. Я пытаюсь запустить программу для t случаев.
Для этого я реализовал алгоритм сортировки типа подсчета (возможно, немного наивный), который подсчитывает количество вхождений каждого числа на входе. Если есть несколько чисел с одинаковым максимальным числом, мне нужно вернуть меньшее из них. Для этого я реализовал сортировку.
Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я запускаю программу на Visual C ++, я получаю сообщение об ошибке, указывающее «векторный индекс вне диапазона». Под Netbeans он генерирует возвращаемое значение 1 и завершается. Пожалуйста, помогите мне найти проблему
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int findmax(vector<int> a, int n)
{
int i,ret;
ret = 0;
for ( i = 0; i <n; i++)
{
if (a[i] > ret) {
ret = a[i];
}
}
return ret;
}
int main() {
int i = 0, j = 0, k = 0, n,m,r1,r2;
vector<int> a;
int t;
vector<int> buff;
cin>>t;
while(t--) {
cin>>n;
a.clear();
buff.clear();
for ( i = 0; i < n; i++) {
cin>>a[i];
}
sort(a.begin(),a.end());
m = findmax(a,n);
for ( j = 0; j < m+1; j++) {
buff[a[j]] = buff[a[j]] + 1;
}
k = findmax(buff,m+1);
for ( i = 0; i < m+1; i++) {
if (buff[i] == k) {
r1 = i;
r2 = buff[i];
break;
}
}
cout<<r1<<" "<<r2<<endl;
}
return 0;
}