bzoj2456: mode

来源:互联网 发布:象屿集团怎么样知乎 编辑:程序博客网 时间:2024/05/30 23:06

2456: mode

Time Limit: 1 Sec  Memory Limit: 1 MB
Submit: 2488  Solved: 1066
[Submit][Status][Discuss]

Description

给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数。

Input

第1行一个正整数n。
第2行n个正整数用空格隔开。

Output

    一行一个正整数表示那个众数。

Sample Input

5
3 2 3 1 3

Sample Output

3

HINT

100%的数据,n<=500000,数列中每个数<=maxlongint。



zju2132 The Most Frequent Number

Source

dood problem,挺不错的题,说的是众数出现次数超过了一半,题目限制内存是1M,所以开数组必定会超内存,那么问题来了,只需要标记一下,附代码:

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int flag,help,cnt,num,n;int main(){//原理是,假设输入有n个数,那么众数出现的次数最少为n/2+1,把所有的数都输入一次 while(scanf("%d",&n)!=EOF)//出现众数就+1,不是众数就减去1; {//最后得到的一定是众数 flag=help=cnt=1;//cnt为当前众数出现的次数,flag为当前的众数 while(n--){scanf("%d",&num);if(num==flag)//如果输入的数为当前的众数 cnt++;//当前众数的个数+1 else{cnt--;//如果输入的不是当前的众数,那么当前众数的个数减去1 if(cnt<=0)//如果当前中数的个数减到了0 {flag=num;//那么当前众数要更新,更新为当前输入的数 cnt=1;//并且标记当前众数出现的次数为1 }}}printf("%d\n",flag);}}


0 0
原创粉丝点击