一道面试题算法
题目为:给你1-1000个连续自然数,然后从中随机去掉两个,再打乱顺序,要求只遍历一次,求出被去掉的两个数。
有一种算法,用的异或,实际上是遍历不只一次,具体异或的算法:http://blog.leezhong.com/tech/2011/06/03/php-xor-find-num.html
今天想到另一种算法,用方程求解。
m = ( 1 + 2 + ...+ 1000) - (998 个的和) x + y
n = ( 1 * 2 * .... * 1000) / ( 998 个的积)x * y
经公式计算:
x = sqart( pow( m , 2 ) / 4 - n ) + m /2
y = m - x
代码测试:
double x = 3 ;double y = 39 ;double m = x + y ;double n = x * y ;x = Math.sqrt( m * m / 4d - n ) + m / 2 ;y = m - x ;System.out.println( x );System.out.println( y );