Минимальное количество значений в массиве - C#
Формулировка задачи:
Допустим имеется одномерный массив
Нужно определить и вывести на экран какое число в массиве отличающееся от нуля имеет меньше всего повторений
В данном случае должно быть min=3.
Что-то ничего в голову не приходит как это реализовать.
double[] mas = new double[] { 1, 1, 2, 2, 3, 4, 4, 4, 1, 0}Решение задачи: «Минимальное количество значений в массиве»
textual
Листинг программы
static void Main(string[] args)
{
double[] mas = new double[] { 1, 1, 2, 2, 3, 4, 4, 4, 1, 0 };
//1
Dictionary<double, int> groups = new Dictionary<double, int>();
for (int i = 0; i < mas.Length; i++)
{
if (mas[i] == 0)
continue;
if (!groups.ContainsKey(mas[i]))
groups[mas[i]] = 1;
else
groups[mas[i]]++;
}
double minKey = 0;
int minCount = mas.Length + 1; //Что-то достаточно большое, чтобы первый встреченный элемент был заведомо меньше
foreach (var item in groups)
{
if (item.Value < minCount)
{
minCount = item.Value;
minKey = item.Key;
}
}
//2
//var minKey = mas.GroupBy(x => x).Where(x => x.Key != 0).OrderBy(x => x.Count()).First().Key;
Console.WriteLine(minKey);
}