• 谁是水王?


    题目

      三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。 如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?

    一、设计思路

      要求尽可能少的使用变量,且时间复杂度为O(n)。

      一个变量保存ID,有一个变量来计数,当前保存的ID与此循环中的ID比较,根据相同与否自加或自减,因为“水王”的ID是大于n/2的,随意在两两相邻的比较中,到最后,“水王”肯定是优势于其他ID,即最后保存的就是“水王”的ID,且计数变量>=0。

      这个程序使用了3个变量,“i”来控制循环,“n”来计数,初始为0,“m_ID”负责记录ID,初始为啊a[0]。在一次循环中,如果当前ID与m_ID中保存ID相同则n自加,否则自减,当自加,自减结束后,判断当前n是否<0,如果<0则重新初始n为0,m_ID为当前ID。

    二、代码

     1 //刘双渤,2015年5月18,水王问题 
     2 #include <iostream>
     3 using namespace std;
     4 
     5 void main()
     6 {
     7     int a[10] = {2,1,3,1,5,1,1,1,1,9};
     8     int n,m_ID;
     9 
    10     n = 0;
    11     m_ID = a[0];
    12 
    13     for(int i = 1;i <10;i++)
    14     {
    15         if(a[i] == m_ID)
    16         {
    17             n += 1;
    18         }
    19         else
    20         {
    21             n -= 1 ;
    22         }
    23         if(n < 0)
    24         {
    25             n = 0;
    26             m_ID = a[i];
    27         }
    28     }
    29 
    30     cout<<"帖子ID顺序为:";
    31     for(int i = 0;i <10;i++)
    32     {
    33         cout<<a[i]<<" ";
    34     }
    35     cout<<endl;
    36 
    37     cout<<"水王就是:"<<m_ID<<endl;
    38 }
    View Code

    三、实验结果

    首为水王:

    首不为水王:

    尾为水王(首不为):

    尾不为水王(首不为):

    四、总结

      编写代码的过程不长,写出来不难,真正难的就是思路。

      就像以前解决一道数学题,怎么也做不出来,只能去寻求帮助,可别人一说,才恍然大悟:原来还可以这么做。现在的大脑就像封闭在一个圈里,转来转去怎么也转不出来。老师说要O(n),就像那就是你挣遍历一次;又说只能用一个变量(保存ID),那好,这怎么办?这个变量要>=n/2,我要知道这个ID出现的次数,一次遍历能求出一个或所有ID的出现次数(很多变量),怎么在一次遍历中就得出来所有ID的所有出现次数让我来和n/2比较呢?就这么想着,就出不来了。

      自己想我到下课也想不出来吧!这也说明了集思广益这是很重要啊!不要总是干想。

  • 相关阅读:
    atcoder 2017Code festival C ——D题 Yet Another Palindrome Partitioning(思维+dp)
    51nod 1089最长回文子串V2 (manacher)
    Codeforces Round #362(Div1) D Legen...(AC自动机+矩阵快速幂)
    51nod 1532 带可选字符的多字符串匹配(位运算)
    51nod 1317 相似字符串对(容斥原理+思维)
    51nod 1526 分配笔名(字典树+贪心)
    51nod 1292 字符串中的最大值V2(后缀自动机)
    51nod 1277字符串中的最大值(拓展kmp)
    SPOJ:[DIVCNT3]Counting Divisors
    单纯形法模板
  • 原文地址:https://www.cnblogs.com/little-clever/p/4513344.html
Copyright © 2020-2023  润新知