任务:

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

1.设计思想:刚看到此题目的时候,以为水王的ID是知道,而且可以用多个变量,进行遍历,再通过一次比较将发帖最多的ID找到就行。但是要求只能有一个变量值,而且要求时间复杂度是O(n),这时候就要考虑换一种思路来解决问题了。假设这里一共有n个帖子,那么水王的帖子数是占一半以上的,就是大于n/2,如果时间复杂度要求是O(n)的话,那也就是只能遍历一次,而且只能有一重循环的结构,所以只能由那个唯一的变量进行ID数量的记录。要找到ID数是总数的一半以上的ID的话,由于每个帖子的位置都是毫无规律的,所以不能进行累加计算,因为ID是一直变化的。然后就想到可以利用加减结合,从第一个ID开始,一次对相邻的两个帖子进行比对,如果说ID相同m就加一,如果不同就减一,到最后m肯定是大于等于0的,只有当m等于0时,将ID赋值为当前ID,就能保证最后的ID是要找的ID。

2.源代码:

#include<iostream>
using namespace std; void main()
{
int i , n, ID[];
int id = ID[], num = ;
cout << "请输入帖子的数目:";
cin >> n;
cout << "输入每个帖子所对应的ID:";
for (i = ; i < n; i++)
{
cin >> ID[i];
}
for (int i = ; i < n; ++i)
{
if (num == )
{
id = ID[i];
num++;
}
else if (ID[i] == id)
{
num++;
}
else
{
num--;
}
} cout << "水王的ID是:" << id << endl; }

3.实验截图:

4.实验总结:(1)在完成每一个程序时都要仔细地研读题目的要求,看它规定的条件,如时间复杂度的要求、变量个数的要求、还有最终结果的形式要求等等诸多因素。因为某个条不一样是设计思路就会有很大的区别,所以在开始设计思路之前一定要把题目完全弄懂,不能因为一些细节而犯错误。

(2)开始的时候,在遍历所有ID的时候,我老是想着对于不相同的ID将计数的变量逐次加一,然后看最后总数大于n/2就行了,可是一想到ID一直在换而且没有规律,如果只有一个变量就无法达到目的了。过了半天才稍微想到可以利用减法计数,相同加一,不同减一,当某个临界的时候改变ID的赋值,思路雏形刚刚有了,然后有同学做了讲解,大致思路是一样的,说明我想的方向是对的。然后再考虑具体的实现过程就可以了。及时转换思路是很重要的。

(3)另外,当一个题目有简单的思路和复杂的思路时, 要多注意比较难一点的设计思路这样会让计算机的运算效率更快。

Task 8 找水王的更多相关文章

  1. 课堂练习--“找水王续"

    设计思路: ①跟上次思路一样,将问题简化成从一个数组中找出出现次数最多的3个数. ②将“两两相消"的思路模式,变成“三一相消” ③初始化time为零,kingid为零,然后按顺序赋值,遇到跟 ...

  2. Java实验--关于课上找“水王”问题分析

    问题的表述就是说有那么一个人,他在一个论坛上发帖,然后每贴必回,自己也发帖.那么这个人在发帖的数目上就超过了整个论坛的帖子数目的一半以上. 我对这个问题一开始的思路是,用SQL语句获取整个列表中的数据 ...

  3. java课程课后作业190530之找水王

    从题目中我们可以看出,水王有着相当严苛的条件才可以成为,那就是必须拥有一半的评论量才可以当上水王.当然这就是破题的关键,最简单的算法当然是用O(N平方)的复杂度的那种算法,但显然,我们需要的不是这种. ...

  4. 找出程序cpu使用率高的原因

    确定是CPU过高 使用top观察是否存在CPU使用率过高现象 找出线程 对CPU使用率过高的进程的所有线程进行排序 ps H -e -o pid,tid,pcpu,cmd --sort=pcpu |g ...

  5. Activity的任务栈Task以及启动模式与Intent的Flag详解

    什么是任务栈(Task) 官方文档是这么解释的 任务是指在执行特定作业时与用户交互的一系列 Activity. 这些 Activity 按照各自的打开顺序排列在堆栈(即“返回栈”)中. 其实就是以栈的 ...

  6. dl learn task

    https://deeplearning4j.org/cn/word2vec Task 1 分类http://blog.csdn.net/czs1130/article/details/7071734 ...

  7. 如何定位死循环或高CPU使用率(linux)

    如何定位死循环或高CPU使用率(linux)  确定是CPU过高 使用top观察是否存在CPU使用率过高现象 找出线程 对CPU使用率过高的进程的所有线程进行排序 ps H -e -o pid,tid ...

  8. 【WP开发】手电筒

    或许很多人都想到,可以利用手机上摄像头的闪光灯做手电筒,当然,有利必有害,每次使用的时间不要过长,几分钟一般不会有什么问题,如果时间太长,难保会有损伤. 以往的方案是调用视频录制功能来开始录制视频,同 ...

  9. 转载SSIS中的容器和数据流—数据转换(Transformations)续

    数据挖掘请求 数据挖掘任务是SSIS中一个很重要的任务,它的思想来源于一些算法.数据挖掘请求运行数据挖掘请求,并将结果输出到数据流.它还可以添加一些预测新列,一些应用场合如下列举: 根据已知的一些列, ...

随机推荐

  1. Google 历年笔试面试30题

    1.正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,需要计算出Q中的前几项,例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12(1).设计一个函数void g ...

  2. 求助:将以下ES5格式代码转换为ES6格式!!!

    function Slider(id){     //属性     //  1. 通过id获取元素对象(大盒子)     this.bigBox = document.getElementById(i ...

  3. JavaWeb总结(十)

    Filter配置详解 web项目目录示意图 <!-- Filter配置 --> <filter> <display-name>Filter_one</disp ...

  4. django学习笔记(2)

    Part 2: The admin site ====> Creating an admin user$ python manage.py createsuperuser   Username: ...

  5. [Windows]_[中级]_[崩溃报告的中级解决方案]

    场景 1.在Windows上用C/C++开发软件, 经常会出现软件级别的崩溃情况, 如果用户看到这种崩溃报告, 那么一般会认为软件质量不高, 从而不想用. Windows上就会有崩溃报告这种噢给你工具 ...

  6. 【HNOI2015】落忆枫音

    题面 题解 求一个有特殊性质的有向图的生成树的个数. 首先,有向图的生成树的个数可以用矩阵树定理,能够得到\(40\)分. 但是如果它是一个\(\mathrm{DAG}\)就很好做,枚举每一个点的父亲 ...

  7. 【Vijos】lxhgww的奇思妙想

    题面 题解 求$k$级祖先孙子 为什么要用长链剖分啊??? 倍增并没有慢多少... 其实是我不会 长链剖分做这道题还是看这位巨佬的吧. 代码 #include<bits/stdc++.h> ...

  8. pycharm导入路径问题

    博主在导入自定义模块式出现模块下有红色波浪线,如下: 例如from conf import setting 导入时会从当前目录下找找到youkuClient就不会再往下找了,所以引入模块的路径不能夸路 ...

  9. css清除浮动clearfix:after的用法详解

    如果外部有一个div容器,其内部div容器设置了float样式,则外部的容器div因为内部没有clear,导致不能撑开.解决方法:  CSS代码: 复制代码 代码如下: .clearfix:after ...

  10. C#英文数字混合验证

    日常可见的验证码,当然不会这么简单,不过算是基本验证码中比较经典的,可以做一点参考,欢迎有更好方法的大哥们指正 using System; using System.Collections.Gener ...