一、题目描述
-
现在有1到10W这10W个数字,现在我们从中去除两个数组,然后剩余的数字全部打乱
-
现问:如何找出哪两个数从这10W个数字中被去除了
二、解决方案1
- 第一步:申请10w个bit的空间,每个bit代表一个数字是否出现过
- 第二步:初始化时将这10w个bit的空间都初始化为0,表示所有数字都没有出现过
- 第三步:然后依次读入已经打乱顺序后的数字,并将对应的bit设为1
- 第四步:所有的都读入完之后,如果哪个bit位为0,那么这个数组就是被去除过的
三、解决方案2
- 第一步:计算1到10W的和(记为n)与平方和(记为p)
1 + 2 + 3 + .... + 100000 = n
1^2 + 2^2 + 3^2 + ....100000^2 = p
- 第二步:然后计算去除之后的所有数字的和(记为m)与平方和(记为q)
1 + 2 + 3 + .... + 去除之后的最后一个数字 = m
1^2 + 2^2 + 3^2 + .... + 去除之后的最后一个数字^2 = p
- 第三步:列方程,设被去除的数字为x和y,则有如下的公式,解方程即可得到x和y的值
x + y = n - m
x^2 + y^2 = p -q