zoukankan      html  css  js  c++  java
  • 寻找水王

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

    思路:解决该题的关键是水王帖子数目已超过一半,并且要求时间复杂度不大于o(n),通过遍历消去法,先设一个变量n。遍历是如果ID不同则n减去1,这样每次可以从帖子中除去两个不一样的ID,如果下一个ID与上一个ID一样,则n+1,最后可以得到水王ID。

    代码:

    #include<iostream>
    #include<string>
    using namespace std;
    
    int main()  
    {  
        string id[11]={"111","111","112","113","111","114","111","118","114","111","111"};
        int k= 0;
        int i;
        string std;
        for(i = 0; i < 11;i++)
        {
              if(k == 0)
              {
                  std = id[i];
                  k= 1;
              }
              else
              {
                  if(std == id[i])
                  {
                      k++;
                  }
                  else
                  {
                      k--;
                  }
              }
        }
        cout<<"水王的ID是"; 
        cout<<std<<endl;
        return 0;  
    }  

    截图:

    总结:该题的难度在与时间复杂度必须为o(n),刚做这道题目时没想到用消去的方法来查找水王,只在抓住帖子数目超过总数的一半这一点是没有用的,要站在总体的角度来思考问题。

  • 相关阅读:
    P1744 采购特价商品
    P1359 租用游艇
    P3092 [USACO13NOV]没有找零No Change
    P1272 重建道路
    P2014 选课
    P1026 统计单词个数
    P1776 宝物筛选_NOI导刊2010提高(02)
    自定义异步非阻塞tornado框架
    tornado进阶篇
    tornado基础篇
  • 原文地址:https://www.cnblogs.com/bingoing/p/4508704.html
Copyright © 2011-2022 走看看