Rotate Function
题意
给定一个数组A,求所有它的旋转数组B的函数值中的 最大值,比如当A = [4,3,2,6]时,求解过程如下:
|
|
解法
此题的n是<=10^5的,那么传统的暴力求解就不可行了。我们观察F[1]-F[0],F[2]-F[1]的差值可以发现是有规律的,假设A长度为5,那么
F[0] = A[1]+2*A[2]+3*A[3]+4*A[4]
F[1] = A[0]+2*A[1]+3*A[2]+4*A[3]
那么F[1]-F[0]=A[0]+A[1]+A[2]+A[3]-4A[4]=A[0]+A[1]+A[2]+A[3]+A[4]-5*A[4]
同理可得F[2]-F[1]=A[0]+A[1]+A[2]+A[3]+A[4]-5*A[3]
从上面的推导可以看出F[n] = F[n-1]+sum(A)-len(A)*A[len(A)-n]
这样就可以根据这个公式进行递推了。
代码
|
|