Найти наиболее часто встречающееся число

В случайном массиве целых чисел с количеством элементов N найти наиболее часто встречающееся число. Если таких чисел несколько, то определить наименьшее из них.


Ответы (1 шт):

Автор решения: A K

Например, с помощью linq:

public int FrequentlyNumber(int[] nums)
{
    return nums.GroupBy(x => x)
               .ToDictionary(x => x.Key, y => y.Count())
               .OrderByDescending(x => x.Value)
               .ThenBy(x => x.Key)
               .Take(1)
               .Select(x => x.Key)
               .First();
}

Вызывать так:

Console.WriteLine(FrequentlyNumber(new int[] { 1, 2, 2, 3, 4, 4 })); // expected: 2
Console.WriteLine(FrequentlyNumber(new int[] { 1, 2, 2, 4, 4, 4 })); // expected: 4
Console.WriteLine(FrequentlyNumber(new int[] { 1, 2, 3, 4, 5, 6 })); // expected: 1

Update. В комментариях @Андрей NOP справедливо указывает, что некоторые шаги излишни и можно сократить:

public int FrequentlyNumber(int[] nums)
{
    return nums.GroupBy(x => x)
               .OrderByDescending(x => x.Count())
               .ThenBy(x => x.Key)
               .Select(x => x.Key)
               .First();
}
→ Ссылка