• 洛谷P2397 yyy loves Maths VI (mode)


    原题链接P2397 yyy loves Maths VI (mode)

    题目描述

    他让redbag找众数

    他还特意表示,这个众数出现次数超过了一半

    一共n个数,而且保证有

    n<=2000000

    而且每个数<2^31-1

    输入输出格式

    输入格式:

    第一行一个整数n

    第二行n个整数

    输出格式:

    一行,这个众数

    输入输出样例

    输入样例#1: 复制
    5
    2 3 3 3 3
     
    输出样例#1: 复制
    3

    说明

    时间限制 1s

    空间限制 3.5M(你没看错3.5M)

    有人想水过,但我告诉你这空间是不够的

    题解

    此题的算法是一种及其偏门的数学做法:摩尔投票

    算法的思路十分简单,我们记录一个值val和一个计数器cnt,每加入一个值就和val比较,如果相等就将cnt加1,否则将cnt减1,如果cnt为0就替换掉val

    这个算法的正确性很好证明:只要一个数的数量大于总数的1/2就可以替换掉所有其他数,

    就像N个人打群架,一个人抵消另一个人,只要其中一方的势力(人数)大于总数的一半,就可以抵消任何其他势力并且还有人剩余

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long LL;
     4 const int INF=1e9+7;
     5 int N,val=-1,num=1;
     6 int main(){
     7     scanf("%d",&N);
     8     for(int i=1;i<=N;i++){
     9         int ii;
    10         scanf("%d",&ii);
    11         if(val==ii){
    12             num++;
    13         }else{
    14             num--;
    15             if(num==0){
    16                 num=1;
    17                 val=ii;
    18             }
    19         }
    20     }
    21     printf("%d",val);
    22     return 0;
    23 }
  • 相关阅读:
    PHP:面向对象学习笔记,重点模拟Mixin(掺入)
    Mybatis Plus 更新
    Mybatis Plus 自定义SQL和分页插件
    Mybatis Plus 查询方法
    Mybatis Plus 快速入门
    Ribbon 负载均衡服务调用
    三个注册中心异同点
    Consul 服务注册与发现
    Spring Boot 集成 Swagger
    Eureka 服务注册与发现
  • 原文地址:https://www.cnblogs.com/guoshaoyang/p/10587964.html
Copyright © 2020-2023  润新知