找到具有相等加权平均值的两个子阵列

时间:2012-09-25 20:08:38

标签: algorithm

我们得到一个整数数组A.我想找到两个具有相同加权平均值的最大长度(两个子阵列的长度必须相等)的连续子阵列。权重是子阵列中的位置。例如

  

A = 41111921111119
  子阵列::(11119)和(11119)

我试图通过DP找到所有子阵列的加权平均值,然后按列排序以找到相同长度的2。但我不能继续进行,我的方法似乎太模糊/暴力。我会感激任何帮助。提前谢谢。

2 个答案:

答案 0 :(得分:0)

第一步应该是对数组进行排序。然后可以识别和分解任何对的相等值。剩下的数字都会有所不同,如下:

2,3,5,9,14,19 ......等等

下一步是将对与他们的中心进行比较:

2 + 5 == 2 * 3?
3 + 9 == 2 * 5?
5 + 14 == 2 * 9?
9 + 19 == 2 * 14?

下一步是比较嵌套对,这意味着如果你有A B C D,则将A + D与B + C进行比较。所以对于上面的例子,它将是:

2 + 9 == 3 + 5?
3 + 15 == 5 + 9?
5 + 19 == 9 + 14?

接下来,您将三元组与两个内部值进行比较:

2 + 3 + 9 == 3 * 5?
2 + 5 + 9 == 3 * 3?
3 + 5 + 14 == 3 * 9?
3 + 9 + 14 == 3 * 5?
5 + 9 + 19 == 3 * 14?
5 + 14 + 19 == 3 * 9?

然后你会比较三对:

2 + 3 + 19 == 5 + 9 + 14?
2 + 5 + 19 == 3 + 9 + 14?
2 + 9 + 19 == 3 + 5 + 14?

等等。订购有不同的方式。一种方法是创建一个初始括号,例如,给定A B C D E F G H,初始括号是ABGH对CDEF,即外部与中心相比。然后根据比较切换值。例如,如果ABGH> CDEF,然后您可以尝试左值大于正确值的所有开关。在这种情况下,G和H大于E和F,因此可能的开关是:

G< - > Ë
G - - ˚F
H - 。 Ë
H - 。 ˚F
GH< - > EF

答案 1 :(得分:0)

首先,由于两个子阵列的长度必须相等,因此可以逐步考虑从1到n的长度。

对于长度i,您可以计算总复杂度为O(n)的每个子阵列的加权和。然后对总和进行排序以确定是否存在相等的对。

因为你排序的时间是O(n ^ 2 log n),而空格是O(n)。

也许我只是重复了问题中提到的解决方案?但我不认为它可以再优化......