[LeetCode]396. Rotate Function
感觉自己的观察力太弱了
题目很明显的列出了所有计算式,明显就是有规律需要观察
以后遇到需要求出很多相同计算方法的计算式前,要注意是不是可以用迭代,利用前一次的结果
public int maxRotateFunction(int[] A) { /* 想要求得最大的,必须要全部求出来,没有规律可以直接求最大的 先旋转数组然后计算耗时很多 看了答案是用的迭代法,当前的结果用上次的结果得到,而第一次的结果最好求 当前计算式和上次计算式是由规律的,看了答案才看出来,斜着对应的一个规律 看一下例子就看出来了: F(k) - F(k-1) = Bk[1] + Bk[2] + ... + Bk[n-1] + (1-n)Bk[0] = sum - nBk[0] */ int len = A.length; int sum = 0; int f = 0; //求sum和第一次的结果 for (int i = 0; i < len; i++) { f += i*A[i]; sum+= A[i]; } int res = f; for (int i = 1; i < len; i++) { int cur = f+sum-len*A[len-i]; res = Math.max(cur,res); f = cur; } return res; }