给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数。
标签:src 数列 技术 mod scanf max onclick space input
给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数。
第1行一个正整数n。
第2行n个正整数用空格隔开。
一行一个正整数表示那个众数。
100%的数据,n<=500000,数列中每个数<=maxlongint。
zju2132 The Most Frequent Number
噗嗤,偏门算法总算有出头之日了
正解:某种不在OI范畴内的(摩尔?)计数法
首先准备一个变量和一个计数器,当计数器为0时,变量是空的,遇到一个元素就装进去
当遇到的元素与变量内的值不一样的时候,计数器减一,反之加一
这样,最后变量的值即为众数
当然这样会被卡双众数,弄个储存器再额外记录哩
1 #include<stdio.h> 2 using namespace std; 3 4 long long bolt = 0,cnt = 0,tmp; 5 6 int main(){ 7 int n; scanf("%d",&n); 8 9 for(int i = 1;i <= n;i++){ 10 scanf("%lld",&tmp); 11 if(!cnt) bolt = tmp,cnt = 1; 12 else if(tmp == bolt) cnt++; 13 else cnt--; 14 } 15 16 printf("%lld",bolt); 17 18 return 0; 19 }
标签:src 数列 技术 mod scanf max onclick space input
原文地址:http://www.cnblogs.com/Chorolop/p/7772824.html