396. Rotate Function
Given an array of integers A and let n to be its length.
Assume $B_k$ to be an array obtained by rotating the array A k positions clockwise, we define a “rotation function” F on A as follow:
F(k) = 0 * Bk[0] + 1 * Bk[1] + ... + (n1) * Bk[n1]
.
Calculate the maximum value of F(0), F(1), ..., F(n1)
.
Note:
n is guaranteed to be less than $10^5$.
Example:


暴力法
这个没啥好说的，时间复杂度O($n^2$), 超时了


递推公式，数学
这个要用到数学推到，请参考链接：https://discuss.leetcode.com/topic/58459/javaonsolutionwithexplanation. 时间复杂度为O(n)


递推公式，更好理解
https://discuss.leetcode.com/topic/58616/javasolutiononwithnonmathameticalexplaination
把Discuss里的解释贴在这里：
Consider we have 5 coins A,B,C,D,E
According to the problem statement
F(0) = (0A) + (1B) + (2C) + (3D) + (4E)
F(1) = (4A) + (0B) + (1C) + (2D) + (3E)
F(2) = (3A) + (4B) + (0C) + (1D) + (2*E)
This problem at a glance seem like a difficult problem. I am not very strong in mathematics, so this is how I visualize this problem
We can construct F(1) from F(0) by two step:
taking away one count of each coin from F(0), this is done by subtracting “sum” from “iteration” in the code below
after step 1 F(0) = (1A) + (0B) + (1C) + (2D) + (3*E)Add n times the element which didn’t contributed in F(0), which is A. This is done by adding “A[j1] * len” in the code below.
after step 2 F(0) = (4A) + (0B) + (1C) + (2D) + (3E)
At this point F(0) can be considered as F(1) and F(2) to F(4) can be constructed by repeating the above steps.
Hope this explanation helps, cheers!

