zoukankan      html  css  js  c++  java
  • [bzoj2456] mode

    题目描述

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

    输入格式

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

    输出格式

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

    样例

    INPUT

    5
    3 2 3 1 3

    OUTPUT

    3

    HINT

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

    本题时限1sec,空限1M(???)

    SOLUTION

    一开始直接map一发,空间写挂;以为是map的锅,就又用了hash(???就T掉了(而且map都挂了,hash能过???

    于是发现空限是1M.

    重新看题。

    可以发现这里的“众数”和我们平常定义的众数有不一样的地方:出现次数超过(lfloorfrac n2 floor)

    所以,不难得出,最坏情况下,依然有:组成最长连续相等区间一定是我们要的“众数”。

    于是代码:

    #include <cstdio>
    using namespace std;
    int n,x,lst,itv;
    int main(){
    	scanf("%d",&n);
    	while(n--){
    		scanf("%d",&x);
    		if (x==lst) ++itv;
    		else if (!itv) {lst=x;itv=1;} else --itv;}
    		//直到有另一区间长度比当前长再更新答案 
    	printf("%d",lst);
    	return 0; 
    }
    

    还有一件事,不要写多余的头文件在前面,我之前就多了个<iostream>,会MLE的。

  • 相关阅读:
    React组件化编程
    React入门
    typeof与instanceof比较+undefined与null各种值的相互比较
    JavaScript 数组去重
    JavaScript数组降维
    了解JS单线程和任务队列!
    clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop
    ES6—Set和Map
    数组+排序--知识点总结
    java scanner
  • 原文地址:https://www.cnblogs.com/hkpls/p/9781603.html
Copyright © 2011-2022 走看看