水贴王问题

个人信息:就读于燕大本科软件工程专业 目前大三;

本人博客:google搜索“cqs_2012”即可;

个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献;

博客内容:水贴王问题

博客时间:2014-5-7;

编程语言:Java ;

编程坏境:Windows 7 专业版 x64;

编程工具:jdk,eclipse x64;

制图工具:office 2010 ppt;

硬件信息:7G-3 笔记本;

真言

每个人类似一台计算机,既高于计算机,又低于计算机,扬长避短,与时俱进。

题目

水贴王问题(选自 编程之美)

有一个人发的帖子的数目超过了总帖子数目的一半,试求出这个人。

思路

数学建模:存在一堆发帖人,每个人发帖人都一个id标识,然后找出这个发帖过半的id。(前提是已经存在这个发帖过半的id)

每个用int标识,这些发帖人的id犹如一个数组的元素,试图找出数目过半的id号。

方法: 抵消法

既然有一个id号数目过半,那么它就是最多的,然而可以用它去抵消别的id号,一对一的去抵消,最后最多的还会剩下好多,这时候我们就知道答案了

个人算法设计如下(时间复杂度 O(n), n为数组的长度)

	static int _Find_more_than_half(int[] data)
	{
		int result = data[0]  ;
		int number = 1;
		for(int i = 1;i < data.length;i++)
		{
			if( result == data[i] )
				number++;
			else
			{
				number--;
				if(number == 0)
				{
					result = data [i] ;
				}
			}
		}
		return result;
	}

这个算法有缺陷,就是如果不存在发帖过半的id,它会找出错误的答案;如果存在发帖过半的id,则它会给出正确的答案。

对于eg: 数组

int[] data ={1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,4,44,4};
		

它会给出 2 (此时是正确的)

对于eg: 数组

int[] data ={1,1,2,2};

他会给出 2 (此时是错误的)

所以我们需要严格检查给出的数据是否符合题目模型,然后再去做出选择。

这个时候问题有转变成了 检查一个数组是否有数目过半的元素。

答案下篇给出,谢谢

水贴王问题

时间: 2024-07-29 11:51:50

水贴王问题的相关文章

水贴王之续,找出数组里出现频率最高的元素

找出数组里出现频率最高的元素 个人信息:就读于燕大本科软件工程专业 目前大三; 本人博客:google搜索"cqs_2012"即可; 个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献; 博客内容:水贴王问题之续 博客时间:2014-5-12; 编程语言:Java ; 编程坏境:Windows 7 专业版 x64; 编程工具:jdk,eclipse x64; 制图工具:office 2007 powerpoint; 硬件信息:7G-3 笔记本; 真言: 痛苦的活着比

寻找水王

一.设计思路 1.我采用的方法是两两计算抵消的想法,相邻的两个ID依次比较. 2.计数器用来表示水王出现的次数.默认当计数器为0时,水王就是当前的ID,因此水王出现一次,计数器从0加1,然后比较后一个ID,如果相同,意味着水王又出现一次,计数器就自加1:如果不同,意味着水王没有出现第二次,直接抵消,计数器就减1.当计数器为0,水王又是当前ID,依次循环. 二.代码 //2016/5/18 信1301-1 黄山成 20133048 寻找水贴王的ID #include<iostream> usin

[HNOI2015]亚瑟王

题目描述 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个看脸的游戏,技能的发动都是看概率的. 作为一个非洲人,同时作为一个前 OIer,小 K 自然是希望最大化造成伤害的期望值.但他已经多年没写过代码,连 Spaly都敲不对了,因此,希望你能帮帮小 K,让他感受一下当欧洲人是怎样的体验. 本题中我们将考虑游戏的一个简化版模型. 玩家有一套卡牌,共 n张.游戏时,玩家将

中央部门领导地址维权邮箱和记者手机号码大全2016(王焰)

今日说法信箱:[email protected] 焦点访谈信箱:[email protected] 社会记录信箱:[email protected] 信息发布:[email protected] [email protected] 国防部:[email protected] 监察部:[email protected] 城乡建设部:[email protected]或者[email protected] 国土资源部:[email protected] 参事室:[email protected] <

跟王老师学接口:(五)实例:对电子宠物系统进行重构

对电子宠物系统进行重构 主讲教师:王少华   QQ群号:483773664 一.重构需求 定义Eatable接口,在接口中定义eat()方法,表示吃饭功能 定义FlyingDiscCatchable接口,在接口中定义catchingFlyDisc()方法,表示接飞盘功能 定义Swimmable接口,在接口中定义swim()方法,表示游戏功能 定义抽象类Pet,包括宠物名称(name).健康值(health)和与主人亲密度(love)属性,并提供抽象方法print(),用来输出宠物信息 定义狗类(

王朝阳:关爱留守儿童是每一位企业家应有的责任

企业家不仅仅在过去,现在,或者是今后,都担任着重要的角色.他们不仅是拯救社会的重要力量,也是发展经济的中流砥柱. 近日,上海品送投资公司总裁王朝阳先生走近留守儿童,关心下一代成长,这不仅仅是企业家的责任,更是整个社会的责任,每一个社会成年人应有的责任和义务. 如何给留守儿童带去真正的关爱,让他们同时沐浴在祖国的蓝天白云之下,感受到来自社会大家庭的温暖.3月22日,记者从贵州黔醉酒业有限公司了解到,为了自觉承担起社会责任,关爱仁怀本地的留守儿童,下一步,他们将出资50万元,给当地的留守儿童带去实实

关于王工小板的电路图中复位电路的错误 和 复位电路原理的学习

王工小板中对于stm32f411芯片的复位电路如下: 实际上这个电路是错误的,经过实测,stm32f411芯片运行时复位引脚为高电平,而在这个电路图里,实际上是把stm32f411芯片运行时复位引脚的电平看为了低电平,按照这个电路,按下按键,会引起电平跳转到高电平从而触发复位,然而实际上并不是这样,stm32f411复位引脚内接上拉电阻(经过实测),所以即使按键松开,其实RST引脚也是高电平,按键按下后,依然是高电平,故这个电路无法触发一个电平的跳变引发复位中断. 对上面说法的证明:目前复位按键

来给罗永浩和王自如打个分(上)

1. 前言 视频实在是太长了,一晚上没法看完,我看到了80分钟,就先写一部分评论. 首先,我个人对于手机来说,就是个普通用户,算不上发烧友,更算不上专业. 对于老罗,只知道他是个名人,他有很多粉丝,他做了锤子T1.对于王自如,一直看着他的视频,但也当看着玩,不是很仔细,不算他的粉丝,最多算是个关注者. 这里,我就以一个手机普通用户的身份,尽量客观的评价一下老罗和王自如的对话前80分钟,后面的100分钟,明天或者后天再补上. 看看,这俩人在这里争论不休,到底都各自赢了什么?又熟输了什么. http

日均百万PV架构第三弹(分布内容为王)

接续接上篇 缓存时代来临 为蓝本,继续改造我们的百万级站点架构,这次我们 拿之前存储静态内容的 nfs 开刀,众所周知 nfs 的多台集群节点下可能由于多重 原因(磁盘io , 网络带宽, 并发场景),不适合做文件共享系统的基础结构. 互联网站点中,存在大量图片或其他静态内容,并且这些内容一般在1M之内,对于 海量小文件,我们将采用mogilefs分布式文件系统来完成.其中概念自行google. # mogilefs分布式文件系统工作流程 架构已经愈发复杂,我们需要从新梳理一下.从下表中应该很容