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

Algorithm 找到两个加权平均值相等的子阵列,algorithm,Algorithm,我们得到一个整数数组。我想找到两个最大长度的相邻子阵列(两个子阵列的长度必须相等),它们具有相同的加权平均值。权重是子阵列中的位置。比如说 A=41111921111119 子阵列::(11119)和(11119) 我试图通过DP找到所有子数组的加权平均值,然后按列排序,找到2个长度相同的子数组。但我无法继续,而且我的方法似乎太模糊/粗暴。我希望能得到任何帮助。提前感谢。第一步应该是对阵列进行排序。然后,可以确定并计算出任何一对相等的值。其余的数字都将不同,如下所示: 2,3,5,9,14,19

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

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


我试图通过DP找到所有子数组的加权平均值,然后按列排序,找到2个长度相同的子数组。但我无法继续,而且我的方法似乎太模糊/粗暴。我希望能得到任何帮助。提前感谢。

第一步应该是对阵列进行排序。然后,可以确定并计算出任何一对相等的值。其余的数字都将不同,如下所示:

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

下一步是将配对与其中心进行比较:

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

下一步是比较嵌套对,这意味着如果您有一个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?

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

ge
gf
H E
hf

GH EF

< P>首先,当两个子数组的长度必须相等时,可以考虑长度从1到n一步一步。

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

因为排序n次,时间为O(n^2 log n),而空间为O(n)


也许我只是重复了你在问题中提到的解决方案?但是我认为它不能再优化了…

不…。我的一个朋友问了我这个问题。这是一个编程网站(可能是Topcoder/Codeforces)提出的一些问题。嗯,那么权重是多少?如果谈论加权平均值,则需要一个权重列表。权重是子数组中的位置。例如,11119的加权平均值为1*1+2*1+3*1+4*1+5*9/15=3.66整数是否为负?零?其他限制?我想它们只会是积极的