در صورتی که بازهی اعداد مورد استفاده کوچیک باشه مثلاً ۱ تا ۱۰۰ باشه. در این صورت میشه یه آرایهی ۱۰۰ تایی ساخت که تعداد هر کدوم از اعداد رو نگه میداره
int count[100] = {0}:
for(int i=0; i<n; i++)
count[array[i]]++;
در صورتی که اسم آرایهی اولیه array
باشه که n
خونه داره.
اما در حالت کلی این روش حافظهی زیادی مصرف میکنه. چون ممکنه array
آرایهای از اعداد long int
باشه که نمیشه برای هر عددش یه خونهی آرایه در نظر گرفت. در این صورت من دو یه راه به نظرم میرسه.
ابتدا آرایه رو مرتب میکنیم. حالا فرض کنیم آرایهی مرتب شده array
با n
عضو باشه. الگوریتم زیر مد رو میده
int number = 0, count = 0, max_number = 0, max_count = 0;
number = max_number = array[0];
count = max_count = 1;
for(int i=1; i<n; i++)
{
if(number == array[i])
{
count++;
}
else
{
if(count > max_count)
{
max_count = count;
max_number = number;
}
count = 1;
number = array[i];
}
}
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)