【发布时间】:2019-05-06 06:27:38
【问题描述】:
给定一个数组 A N 整数。我需要找到X,以使以下两个值(A[1] * A[2] * ... * A[X]) 和(A[X+1] * A[X+2] * ... * A[N]) 之间的差异最小,即我需要最小化| (A[1] * A[2] * ... * A[X]) - (A[X+1] * A[X+2] * ... * A[N]) |,如果有多个这样的X 值,打印最小的一个。
约束:-
1 N
1 A[i]
我无法找到有效解决此问题的方法。 解决此问题的最佳方法应该是什么。有没有什么特殊的算法可以让大量的数字相乘。
【问题讨论】:
-
从概念上讲,将数组分为三部分:
left、middle、right。最初,middle是整个数组,left和right是空的。您还需要一个浮点值,它代表左侧产品到右侧产品的ratio。最初,ratio为 1。如果ratio >= 1将middle的最后一个元素移动到right,并将ratio除以该元素。否则将middle的第一个元素移动到left,并将ratio乘以该元素。继续直到middle只有一个元素。答案是将最后一个元素移动到left或right。 -
@krpra 你对此有什么解决方案?
标签: algorithm math data-structures