面试冲刺:13---有1到10w这10w个数,去除2个并打乱次序,如何找出那两个数?

一、题目描述

  • 现在有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

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/107737067