zoukankan      html  css  js  c++  java
  • 找“水王”

    一、实验要求

    三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个水王,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。

    如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?要求时间复杂度为O[N]

    二、设计思想

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

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

    三、代码

     1 // KingofNavy.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include"iostream"
     6 using namespace std;
     7 
     8 int main()
     9 {
    10     int key=0;
    11     int king=0;
    12     int i=0;
    13     int array[]={5,5,3,5,3,3,3,5,3,3,4,3,2,3,5,3,7,3,3,2,3};
    14     for(i=0;i<20;i++)
    15     {
    16         if(key==0)
    17         {
    18             king=array[i];
    19             cout<<"Now the King of Navy is:"<<array[i]<<endl;
    20             key=1;
    21         }
    22         else
    23         {
    24             if(king==array[i])
    25             {
    26                 key++;
    27             }
    28             else
    29             {
    30                 key--;
    31             }
    32         }
    33     }
    34     cout<<"The ID of King of Navy is:"<<king<<"!"<<endl;
    35     cout<<"OVER..."<<endl;
    36     return 0;
    37 }
    四、测试结果
    五、总结
    遍历的方法很简单,但不总是符合要求,因此,多一些思考问题的方式总是好的。
  • 相关阅读:
    js变量
    运行javascript的方式
    .Net 内存泄露
    .NET Reflector反编译的方法
    SVN 忽略获取和提交obj、bin文件夹
    SQL Server编程(06)触发器
    SQL Server编程(05)游标
    SQL Server编程(04)基本语法
    SQL Server编程(03)自定义存储过程
    SQL Server编程(02)自定义函数
  • 原文地址:https://www.cnblogs.com/zglsh/p/4445547.html
Copyright © 2011-2022 走看看