题目大意:给你N(N<=100000)个数,每个数大小在10^-9到10^9之间,问其中出现频数最高的是哪个数?并输出其中数值最小的那个
考察点:排序?
思路分析:排序一次后,从前往后扫一遍就行。。。。
交了N次才AC。。一开始想用哈希做,结果小细节一直没写好。。后来发现直接快排就行。。于是就A了。。
#include<stdio.h>
#include<stdlib.h>
long int a[100002];
void quicksort(long int* arr,int l,int r)
{
int i,j;
long int k,t;
if (l>=r) return;
i=l;j=r;k=arr[(l+r)/2];
while (i<=j)
{
while (arr[i]<k) i++;
while (arr[j]>k) j--;
if (i<=j)
{
t=arr[i];arr[i]=arr[j];arr[j]=t;
i++;j--;
}
}
quicksort(arr,i,r);
quicksort(arr,l,j);
}
int main()
{
int n,i,f,m;
long int j,ans;
while (scanf("%d",&n)!=EOF)
{
for (i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
quicksort(a,1,n);
i=1;j=a[1];f=1;m=0;ans=j;
while (i<n)
{
i++;
if (j==a[i]) f++;
else {
if (f>m)
{
m=f;
ans=j;
}
j=a[i];
f=1;
}
}
if (f>m) ans=j;
printf("%d\n",ans);
}
return 0;
}