零起點學算法——找出一個數組中出現次數最多的那個元素


對於大家都能想到的空間換時間這種想法不再贅述,這種方法對於數量級較小還可起效,但對於數據范圍大的話無法保證。

接下來淺談一下我的想法——先排序,再統計。

由於初學ACM,無法保證算法的高效,只代表我的拙見,未考量空間度和復雜度,如有不合理之處,還請指出,不吝賜教。

Description

找出一個數組中出現次數最多的那個元素

Input

第一行輸入一個整數n(不大於20)
第二行輸入n個整數

多組數據

Output

找出n個整數中出現次數最多的那個整數(每行一個,保證唯一解)

Sample Input

4
1 2 2 3

Sample Output

2 

來源:WUSTOJ

代碼如下:(C語言哈)

#include<stdio.h>
int main()
{
	int n,i,j,k,t,m,a[25];
	while(scanf("%d",&n)!=EOF)
	{
		for(i=0;i<n;i++)
			scanf("%d",&a[i]);
		for(i=0;i<n-1;i++)
		{
			for(j=i+1;j<n;j++)
			{
				if(a[i]>a[j])
				{
					t=a[i];
					a[i]=a[j];
					a[j]=t;
				}
			}
		}
		t=a[0];
		m=1;
		k=1;
		for(i=1;i<n;i++)
		{
			if(a[i]!=a[i-1])
			{
				if(k>m)
				{
					m=k;
					t=a[i-1];
				}
				k=1;
			}	
			else
				k++;	
		}
		if(k>m)
		{
			m=k;
			t=a[i-1];
		}
		printf("%d\n",t);
	}
	return 0;
}

先用了冒泡排序,然后默認第一個出現最多的數是第一個,t記錄當前出現次數最多的數,m記錄t出現的次數,k記錄當前數出現的次數,當在當前數與前一個數不相等且k>m時方進行t與m的更新。

循環檢索結束后要進行最后一次更新!

以上





注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: