以后把题解放在前面,估计没人看题解先看题。。。
内存1M,4个int(其实对内存的概念十分模糊),众数即为出现次数最多的数,可以用抵消的思想(但是众数不是可以是一大坨么。。。)
1 #include <cstdio> 2 using namespace std; 3 int now,n,a,t; 4 int main() 5 { 6 scanf("%d",&n); 7 for (int i=1;i<=n;i++) 8 { 9 scanf("%d",&a); 10 if (now==a) t++; 11 else 12 { 13 t--; 14 if (t<=0) t=1,now=a; 15 } 16 } 17 printf("%d\n",now); 18 return 0; 19 }
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
时间: 2024-12-18 21:22:26