The Most frequent Number in an array

后端 未结 9 1606
粉色の甜心
粉色の甜心 2021-01-17 14:14

I have this Array i wrote a function MostFreq that takes an array of integers and return 2 values : the more frequent number in the array and its frequency check this code i

相关标签:
9条回答
  • 2021-01-17 15:06
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace MostFrequentElement
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[] array = new int[] { 4, 1, 1, 4, 2, 3, 4, 4, 1, 2, 4, 9, 3, 1, 1, 7, 7, 7, 7, 7 };
                Array.Sort(array, (a, b) => a.CompareTo(b));
                int counter = 1;
                int temp=0 ;
    
                List<int> LOCE = new List<int>();
                foreach (int i in array)
                {
                    counter = 1;
                    foreach (int j in array)
    
    {
                        if (array[j] == array[i])
                        {
                            counter++;
                        }
                        else {
                        counter=1;
                        }
                        if (counter == temp)
                        {
                            LOCE.Add(array[i]);
                        }
                        if (counter > temp)
                        {
                            LOCE.Clear();
                            LOCE.Add(array[i]);
                            temp = counter;
    
                        }
                    }
    
                }
                foreach (var element in LOCE)
                {
                    Console.Write(element + ",");
                }
                Console.WriteLine();
                Console.WriteLine("(" + temp + " times)");
                Console.Read();
            }
        }
    }
    
    0 讨论(0)
  • 2021-01-17 15:16
    int count = 1;
    int currentIndex = 0;
    for (int i = 1; i < A.Length; i++)
    {
        if (A[i] == A[currentIndex])
            count++;
        else
            count--;
        if (count == 0)
        {
            currentIndex = i;
            count = 1;
        }
    }
    
    int mostFreq = A[currentIndex];
    
    0 讨论(0)
  • 2021-01-17 15:21

    You could eliminate the sort you do at the start by iterating the entire array once, keeping a count of how many times you come across each value in a temporary array, and then iterating the temporary array for the highest number. You could keep both the highest frequency count and the most frequent item throughout, too.

    Different sorts have different efficiencies on different types of data, of course, but this would be a worst case of just two iterations.

    Edit: Apologies for the repeat... 'Tweren't there when I started :)

    0 讨论(0)
提交回复
热议问题