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

    一、题目与要求

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

    二、设计思想

      排序法:由于该“水王”发帖数目超过了帖子数目的一半,将列表中的ID从小到大进行排序,则中间的ID即为水王。但由于其时间复杂度不满足要求,因此需要采用更便捷的方法。

      每次删除两个不同的数,因为“水王”发帖数过半,因此删除这俩数后“水王”发帖数依旧过半,若两ID相同则利用标志key++,key>0且两ID不同时key--。

    三、源代码

     1 //找水王,信1301-1,李青 2016/5/20
     2 #include<iostream>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int key = 0;
     8     int king = 0;
     9     int i = 0;
    10     int array[] = { 5, 5, 3, 5, 3, 3, 5, 5, 3, 3, 4, 3, 2, 3, 5, 3, 7, 5, 3, 2, 5};
    11     for (i = 0; i<20; i++)
    12     {
    13         if (key == 0)
    14         {
    15             king = array[i];
    16             cout << "目前的水王是:" << array[i] << endl;
    17             key = 1;
    18         }
    19         else
    20         {
    21             if (king == array[i])
    22             {
    23                 key++;
    24             }
    25             else
    26             {
    27                 key--;
    28             }
    29         }
    30     }
    31     cout << "水王的ID是:" << king<< endl;
    32     return 0;
    33 }

    四、运行结果:

    五、心得体会

      这次找水王的程序体现了代码优化的一个重要思想,那就是对于问题的深入分析是优化的前提,由题目我们可以知道,水王是发帖数超过一半的人,所以只要由小到大排序,中间的ID就是水王的ID,但是这样做并不是较为优质的解法,通过比较并删除不同的ID最后得到的也是水王的ID,这种解法就比较符合简洁、高效的原则了。

  • 相关阅读:
    Lombok介绍、使用方法和总结
    Vargant centOS7安装
    Nginx
    Docker
    GOPATH
    Golang http
    /^正则表达式$/
    go: missing Git command. See https://golang.org/s/gogetcmd
    Golang 反射
    Golang 常量
  • 原文地址:https://www.cnblogs.com/liqing1/p/5530227.html
Copyright © 2011-2022 走看看