可可肉的逻辑题---(四)把谁给丢了?(下)

来源:互联网 发布:南京政府网络问政 编辑:程序博客网 时间: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日

 

 

 

 

您的支持是我创作的最大动力

 

 

 

 

 

 

 

 

 

 

 

相关文章

 

 

 

 

可可肉的逻辑题---(一)到底听到多少响

可可肉的逻辑题---(二)最初至少有几个桃子呢?

可可肉的逻辑题---(二)最初至少有几个桃子呢? (下)

可可肉的逻辑题---(三)需要压缩的数据

可可肉的逻辑题---(四)把谁给丢了?

可可肉的逻辑题---(五)数太大了怎么办?

烧饼铺

可可肉的逻辑题---(六)聪明的妻子

 

 

 

 

 

 

 

 

 

 

原创粉丝点击