Task 8 找水王
任务:
三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他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 找水王的更多相关文章
- 课堂练习--“找水王续"
设计思路: ①跟上次思路一样,将问题简化成从一个数组中找出出现次数最多的3个数. ②将“两两相消"的思路模式,变成“三一相消” ③初始化time为零,kingid为零,然后按顺序赋值,遇到跟 ...
- Java实验--关于课上找“水王”问题分析
问题的表述就是说有那么一个人,他在一个论坛上发帖,然后每贴必回,自己也发帖.那么这个人在发帖的数目上就超过了整个论坛的帖子数目的一半以上. 我对这个问题一开始的思路是,用SQL语句获取整个列表中的数据 ...
- java课程课后作业190530之找水王
从题目中我们可以看出,水王有着相当严苛的条件才可以成为,那就是必须拥有一半的评论量才可以当上水王.当然这就是破题的关键,最简单的算法当然是用O(N平方)的复杂度的那种算法,但显然,我们需要的不是这种. ...
- 找出程序cpu使用率高的原因
确定是CPU过高 使用top观察是否存在CPU使用率过高现象 找出线程 对CPU使用率过高的进程的所有线程进行排序 ps H -e -o pid,tid,pcpu,cmd --sort=pcpu |g ...
- Activity的任务栈Task以及启动模式与Intent的Flag详解
什么是任务栈(Task) 官方文档是这么解释的 任务是指在执行特定作业时与用户交互的一系列 Activity. 这些 Activity 按照各自的打开顺序排列在堆栈(即“返回栈”)中. 其实就是以栈的 ...
- dl learn task
https://deeplearning4j.org/cn/word2vec Task 1 分类http://blog.csdn.net/czs1130/article/details/7071734 ...
- 如何定位死循环或高CPU使用率(linux)
如何定位死循环或高CPU使用率(linux) 确定是CPU过高 使用top观察是否存在CPU使用率过高现象 找出线程 对CPU使用率过高的进程的所有线程进行排序 ps H -e -o pid,tid ...
- 【WP开发】手电筒
或许很多人都想到,可以利用手机上摄像头的闪光灯做手电筒,当然,有利必有害,每次使用的时间不要过长,几分钟一般不会有什么问题,如果时间太长,难保会有损伤. 以往的方案是调用视频录制功能来开始录制视频,同 ...
- 转载SSIS中的容器和数据流—数据转换(Transformations)续
数据挖掘请求 数据挖掘任务是SSIS中一个很重要的任务,它的思想来源于一些算法.数据挖掘请求运行数据挖掘请求,并将结果输出到数据流.它还可以添加一些预测新列,一些应用场合如下列举: 根据已知的一些列, ...
随机推荐
- Java 并发系列(一) ThreadPoolExecutor源码解析及理解
ThreadPoolExecutor 它是线程池最核心的类, 这里对核心的方法做简要的剖析(会持续更新),以加深对线程池运行原理的理解. 1. 核心成员变量及相关方法 // ctl非常重要,用整型表示 ...
- 图片 和 base64 互转
图片转base64 NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlStr]]; UIImage *img = ...
- python3爬虫-通过selenium登陆拉钩,爬取职位信息
from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from se ...
- Datax3.0使用说明
一.datax3.0介绍 1.DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之间稳 ...
- 链接SQLServer数据库 导出csv文件
依赖::::<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>ms ...
- Verilog_Day2_Plus
内容为书中第4章 等式运算符 “==” 与 “===” 的区别 Verilog中存在4种等式运算符: == (等于); != (不等于); === (等于); !== (不等于). “==”与&quo ...
- Oracletop10物理段
Oracletop10物理段 select owner, name, type, mega, tbs from (select owner, case when segment_type = 'LOB ...
- Noip前的大抱佛脚----Noip真题复习
Noip前的大抱佛脚----Noip真题复习 Tags: Noip前的大抱佛脚 Noip2010 题目不难,但是三个半小时的话要写四道题还是需要码力,不过按照现在的实力应该不出意外可以AK的. 机器翻 ...
- windows7 64位机上安装配置CUDA7.5(或8.0)+cudnn5.0操作步骤
按照官网文档 http://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html#axzz4TpI4c8v ...
- P3704 [SDOI2017]数字表格
P3704 [SDOI2017]数字表格 链接 分析: $\ \ \ \prod\limits_{i = 1}^{n} \prod\limits_{j = 1}^{m} f[gcd(i, j)]$ $ ...