栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

找到两个缺失的数字

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

找到两个缺失的数字

可以使用O(1)内存来完成。

您只需要几个整数即可跟踪一些总和。整数不需要log n位(其中n是输入整数的数量),它们只需要2b + 1位,其中b是单个输入整数中的位数。

当您第一次阅读流时,将所有数字及其所有平方相加,即对于每个输入数字n,请执行以下操作:

sum += nsq_sum += n*n

然后在第二个流上对两个不同的值sum2和sq_sum2执行相同的操作。现在执行以下数学运算:

sum - sum2 = a + bsq_sum - sq_sum2 = a^2 + b^2(a + b)(a + b) = a^2 + b^2 + 2ab(a + b)(a + b) - (a^2 + b^2) = 2ab(sum*sum - sq_sum) = 2ab(a - b)(a - b) = a^2 + b^2 - 2ab    = sq_sum - (sum*sum - sq_sum) = 2sq_sum - sum*sumsqrt(2sq_sum - sum*sum) = sqrt((a - b)(a - b)) = a - b((a + b) - (a - b)) / 2 = b(a + b) - b = a

您需要在所有中间结果中使用2b + 1位,因为您要存储两个输入整数的乘积,并且在一种情况下,将这些值之一乘以2。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/469332.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号