任务:

三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他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. OC 知识:Foundation 框架及相关类详尽总结

    本文用来介绍Foundation框架的相关知识,以及Foundation框架所提供类的相关知识总结. 1. 框架介绍 框架是由很多类.方法.函数和文档按照一定的逻辑组织起来的集合,以使开发程序变得更加 ...

  2. Vue脚手架搭建步骤

    Vue脚手架的搭建步骤 1.   去node.js官网下载node.js并安装,如下图: 2.   找到下载的文件并点击安装: 一直到finish完成.安装成功 3.   通过DOS密令打开: 输入: ...

  3. jQuery----(类似抽奖转盘)高亮显示

    效果如图: 原图 鼠标进入后开始变化图                                                                              实现需 ...

  4. laravel 的用户认证

    1.简介 Laravel 中实现用户认证非常简单.实际上,几乎所有东西都已经为你配置好了.配置文件位于config/auth.php,其中包含了用于调整认证服务行为的.文档友好的选项配置. 在底层代码 ...

  5. Django:表单字段如何在模板中用中文显示

    在处理中文显示的时候,刚开始接触django时,很容易弄混表单汉化和Admin后台汉化. 1.表单汉化:是针对用户的.用户浏览网页时,表单的名称如果是英文的,不够友好,所以需要显示为中文,虽然代码编写 ...

  6. linux java jdk环境变量设置之后,依旧提示 No such file or directory

    今天又默默的在linux下安装java 明明是很简单的事情,在~/.bashrc中添加如下内容: export JAVA_HOME=/home/ubuntu/jdkexport CLASSPATH=. ...

  7. jQuery学习-页面就绪函数

    1.开发工具HBuilder <!DOCTYPE html> <html> <head> <meta charset="utf-8" /& ...

  8. cmp(x,y)

    cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1.

  9. STM8S——Analog/digital converter (ADC)

    1.ADC1 and ADC2 are 10-bit successive approximation Anolog to Digital Converters. 所谓successive appro ...

  10. paramiko 简单的使用

    感觉自己操作服务器还要用xshell,麻烦很多,于是呢就去google,找到了paramiko. 使用这个模块还是很简单的, 我们链接服务器,只需要导入 SSHClient,AutoAddPolicy ...