Как исключить элемент масива, который повторяется чаще всего?

Здравствуйте, мне нужно исключить элемент масива, который
повторяется чаще всего, как ето сделать?

сделал только подсчет елементов.
public void DeleteMod(int[] array)
        {
            for (int i = 0; i < array.Length; i++)
            {
                int count = 0;
                for (int j = 0; j < array.Length; j++)
                {
                    if (array[j] == array[i])
                    {
                        count++;

                    }
                   
                }
            
                richTextBox2.Text += array[i] + " повторюється ( " + count + " ) Разів\n";
                

            }
        }
  • Вопрос задан
  • 146 просмотров
Решения вопроса 1
@Bender100 Автор вопроса
решил )
public void DeleteMod(int[] array)
        {
            int[,] arr = new int[2, array.Length];
            for (int i = 0; i < array.Length; i++)
            {
                int count = 0;
                for (int j = 0; j < array.Length; j++)
                {
                    if (array[j] == array[i])
                    {
                        count++;

                    }
                   
                }

                for (int t = 0; t < array.Length; t++)
                {
                    arr[0, i] = count;
                    arr[1, i] = array[i];
   
                    
                }
                richTextBox2.Text += arr[1, i] + " повторюється ( " + arr[0,i] + " ) Разів\n";
        

            }
            var most = array.GroupBy(x => x).OrderByDescending(x => x.Count()).First(); //находим самое частовстречаемое число
            richTextBox2.Text += "\n Елемент " + most.Key + " зустрічається: " + most.Count() + " рази, Буде видалено";

            //Видалення
            if (most.Count() <= 1)
            {
                MessageBox.Show("Елемент не буде видалено так як він зустрічається 1 раз");
            }
            else
            {
                MessageBox.Show("Елемент ("+ most.Key + ")  буде видалено  він зустрічається " +  most.Count()  + " раз");
                array = array.Where(val => val != most.Key).ToArray();
            }
            //===
            richTextBox2.Text += "\nReady: \n";
            for (int i = 0; i < array.Length; i++)
            {
                richTextBox2.Text += array[i] + " ";
            }

            richTextBox2.Text += "\nВідсортований масив: \n";
            Stopwatch SW = new Stopwatch();
            SW.Start();
            quikSort(array, 0, array.Length - 1);
            SW.Stop();
            label4.Text = "Час: " + SW.ElapsedMilliseconds + "мс";
        }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Dmitriyq
Используя Linq можно сделать так:
var mostRepeatedNumber = array.GroupBy(x => x, x => x)
    .OrderByDescending(x => x.Count())
    .First().Key;
array = array.Where(val => val !=mostRepeatedNumber).ToArray();
Ответ написан
Комментировать
san_jorich
@san_jorich
Творческий кодер
Загони array[i] и count во временный массив, в конце отсортируй по самому большому значению count и удали совпадающие в массивах элементы
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы