Что касается «простого» способа, вот еще одна альтернатива LINQ:
static uint mostCommonDigit(uint[] n) =>
(uint)string.Concat(n).GroupBy(c => c).Max(g => (g.Count(), g.Key - '0')).Key
string.Concat
преобразует массив в строку (например, «112233»).
GroupBy
группирует символы в строке по символам (например, '1' => ['1', '1'], '2' => ['2', '2']),
Часть Max аналогична упорядочению по количеству элементов в каждой группе, затем по ключу каждой группы и затем получению последнего элемента, но это позволяет избежать сортировки.Часть - '0'
преобразует символьный ключ в целое число.
Вероятно, это в несколько раз медленнее, чем ваше решение, из-за издержек из LINQ, но разница будет в миллисекундах и не будет заметна для таких маленьких массивов.