可可肉的逻辑题---(四)把谁给丢了?(下)
来源:互联网 发布:南京政府网络问政 编辑:程序博客网 时间:2024/04/27 00:14
大家好,我是二厶可可肉,来自河北省石家庄市,现就读于北京理工大学
把谁给丢了?这道逻辑题源自一次面试,后来让我改装了,这个题的特点是,数据量非常大(1~100W),因为是无序并且数据大,所以常规的排序算法明显不能满足要求。下面我来详细解释一下这道题的解题思路。
根据已知条件,源数据是1~100W的连续不重复数字。那么,这个总数是可以确定的,在不考虑数据溢出的前提下,可以遍历累加求出总合得出sum,当然,这样做肯定是可以的,不过可可肉需要提醒你的是,在小学,我们学过一个叫做前N项合的公式,这串数字也是等差数列,所以可以使用公式:(首项+末项)*项数/2 来算出总合。
因为源数据的一种一个数据被指定为0,则证明:新数据源的总合=sum-丟失的数
那么丢失的数是多少呢?
正如你所想的那样
丢失的数=sum-新数据源的总和
好了,sum 已经出来了, 剩下的就是 遍历 新数据源求总和了。
有的朋友可能说:int越界!你这个算法考虑不周!
其实吧,我想淡定的打局:“呵呵”
好了,不说闲话,其实就算问题是1~1E 随机删除一个数求合,刚刚的办法依然可以直接进行使用,而且不需要也不用考虑int越界的问题,首先 Int 的取值范围是-2E~2E(零头略) 只要每个数不超过这个数就可以了,这里利用的是一个“取模”的概念,当你正反两边都对这个数字取模,在相减,只要数字在模内,得到的数就是这两个的差值。关于模的概念,大家可以问问百度,如果依然不太清楚,可以留言,我必一一回复。好了,这个问题就先到这了,希望大家喜欢 :)
哦,对了,上文提到,这个题是改装来的,有兴趣的可以做一下原题,原题是多了一个树,有一个数重复了,求重复的是多少
这里需要说一下,结果不是最重要的,重要的是一种思维方式
如果觉得还不错,就请点一下下面的“顶”吧!
您的支持是我创作的最大动力
鸣谢
师父
二厶可可肉
2012年11月09日
您的支持是我创作的最大动力
相关文章
可可肉的逻辑题---(一)到底听到多少响
可可肉的逻辑题---(二)最初至少有几个桃子呢?
可可肉的逻辑题---(二)最初至少有几个桃子呢? (下)
可可肉的逻辑题---(三)需要压缩的数据
可可肉的逻辑题---(四)把谁给丢了?
可可肉的逻辑题---(五)数太大了怎么办?
烧饼铺
可可肉的逻辑题---(六)聪明的妻子
- 可可肉的逻辑题---(四)把谁给丢了?(下)
- 可可肉的逻辑题---(四)把谁给丢了?
- 可可肉的逻辑题---(五)数太大了怎么办?(下)
- 可可肉的逻辑题---(五)数太大了怎么办?
- 可可肉的逻辑题---(十)多了哪个呢?
- 可可肉的逻辑题---(三)需要压缩的数据 (下)
- 可可肉的逻辑题---(六)聪明的妻子(下)
- 可可肉的逻辑题---(二)最初至少有几个桃子呢? (下)
- 可可肉的逻辑题---(九)可可肉的水仙花(上)
- 可可肉的逻辑题---(六)聪明的妻子
- 可可肉的逻辑题---(十一)原函数是什么?
- 可可肉的逻辑题---(八)这棵树的深度(上)
- 可可肉的逻辑题---(三)需要压缩的数据
- 可可肉的逻辑题---(七)比较两个字符串(上)
- 可可肉的逻辑题---(一)到底听到多少响
- 可可肉的逻辑题---(二)最初至少有几个桃子呢?
- 惊天动地 不怎么玩了,会把常用的几个作弊方法共享下给普通大众吧(私服)
- 把80%的时间给了孩子
- 多态的三个条件: 1、要有继承 2、要有重写 3、父类引用指向子类对象----java
- shell中$*,$@,$# 的区别
- cocos2d中position与anthor_point的关系
- html和js一点整理(1)
- 常见排序算法--java实现
- 可可肉的逻辑题---(四)把谁给丢了?(下)
- Android系统中自带的图标
- 可可肉的逻辑题---(五)数太大了怎么办?(下)
- C#文件过滤器 filter
- XP和RUP的比较
- openstack gitview work flow
- Q:最后一个 ‘”我“ 笑的是什么?
- 可可肉的逻辑题---(六)聪明的妻子(下)
- Git 常用命令速查表