输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
解题思路,从数组的最大值和最小值开始,一直向内夹逼,如果有则是乘积最小的一对数值。
证明如下:
到的第一组(相差最大的)就是乘积最小的。可以这样证明:考虑x+y=C(C是常数),x*y的大小。不妨设y>=x,y-x=d>=0,即y=x+d, 2x+d=C, x=(C-d)/2, x*y=x(x+d)=(C-d)(C+d)/4=(C^2-d^2)/4,也就是x*y是一个关于变量d的二次函数,对称
转载
2017-08-22 21:02:53 ·
208 阅读 ·
0 评论