Вывести наиболее встречающийся элемент в массиве - C#
Формулировка задачи:
Сначала вводим кол-во тестов k, далее вводим кол-во элементов в массиве и сам массив, повторяем пока не пройдём все тесты k. Если кол-во наиболее встречающийся элементов одинаково, выводим 0.
Пример:
Ввод:
2
6
1 2 5 2 1 2
4
5 5 4 4
Вывод:
2
0
Решение задачи: «Вывести наиболее встречающийся элемент в массиве»
textual
Листинг программы
// пример использования:
public static void Main(string[] args)
{
int length = 10; // int.Parse(Console.ReadLine());
string arrayText = "3 1 2 3 1 2 4 4 4 0"; // Console.ReadLine();
string[] arrayItems = arrayText.Split(new char[] { ' ' }, length, StringSplitOptions.RemoveEmptyEntries);
int[] numbers = Array.ConvertAll(arrayItems, int.Parse);
int mostFrequentItem = GetMostFrequentArrayItem(numbers);
Console.WriteLine(mostFrequentItem); // mostFrequentItem будет равен 4
}
// для удобства использования алгоритм выделен в отдельный метод
private int GetMostFrequentArrayItem(int[] numbers)
{
int length = numbers.Length;
Dictionary<int, int> counts = new Dictionary<int, int>(length);
for (int index = 0; index < length; ++index)
{
int current = numbers[index];
if (counts.ContainsKey(current))
{
counts[current]++;
}
else
{
counts.Add(current, 1);
}
}
bool moreThanOneMaximum = false;
int maxCount = -1;
int maxNumber = -1;
foreach (var pair in counts)
{
if (pair.Value > maxCount)
{
maxNumber = pair.Key;
maxCount = pair.Value;
moreThanOneMaximum = false; // изменение вот тут - добавил сброс флага
}
else if (pair.Value == maxCount)
{
moreThanOneMaximum = true; // и вот тут - убрал break;
}
}
return (moreThanOneMaximum) ? 0 : maxNumber;
}