zoukankan      html  css  js  c++  java
  • BZOJ-2456-mode(思维题)

    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

    题解

    这道题空间只给你1MB,所以肯定是一道思维题

    我们考虑到众数出现次数大于n/2,所以我们能想到用一个数和它不相等的数相抵消(这个数大于n/2所以可以把其他数都抵消掉)

    ans刚开始的时候等于第一个数

    读进来一个数,我们判断一下和当前的ans比较,如果不同 这个数的次数-1,再判断是否为0,如果为0就把当前这个数赋值到ans上 如果相同的话次数就+1

    最后的答案就是ans

     1 #include<cstdio>
     2 using namespace std;
     3 int n,x,ans,num;
     4 int main(){
     5     scanf("%d",&n);
     6     while (n--){
     7         scanf("%d",&x);
     8         if (!num) ans=x;
     9         if (x!=ans) num--; else num++;
    10         if (!num) ans=x;
    11     }
    12     printf("%d
    ",ans);
    13     return 0;
    14 }
    View Code
  • 相关阅读:
    2.8
    2.7
    2.6
    2.5
    2.4第三篇读后感
    2.2第一篇读后感
    2.1
    字符统计
    6468: Snuke's Coloring
    6463: Tak and Hotels II
  • 原文地址:https://www.cnblogs.com/zhuchenrui/p/7592744.html
Copyright © 2011-2022 走看看