[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;
    }
原文地址:https://www.cnblogs.com/stAr-1/p/8485315.html