|
|
第二轮楼主的做法,那个预处理,并不是针对特定K长度,而是用于计算各种长度都可以,这样over kill了吧?
好像人问的是对特定K啊。
愚兄提供一个思路:
两个数组,长度为K
H1[k]=(a1*a2*ak, ...,ak-1*ak, ak) //从第K个数往前反算
H2[k]=(ak+1, ak+1*ak+2, ...., ak+1*ak+2*....ak) //从第K+1个数往后算
这两个数组算完,复杂度是2K,
B[0]=H1[0],
B[2k-1]=h2[k-1];
然后,
B[2]=H1[1]*H2[0]
....
这个复杂度还是K
这样算了长度为2K的数组复杂度是K,
剩下部分,移动K,同样处理,
这个复杂度是O(n)的
代码比较蛋疼就不写了。
|
|