BIT 1006 The most frequent number

本文介绍了一种通过快速排序解决寻找给定数据集中出现频率最高的数值问题的方法,并提供了一个C语言实现的具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大意:给你NN<=100000)个数,每个数大小在10^-910^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;
}



 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值