396. Rotate Function

来源:互联网 发布:mac桌面出现ds store 编辑:程序博客网 时间:2024/05/16 11:03

题目大意:给定数组A,长度为ASize,分别用【0~ASize-1】作为各项的系数,求最大值。例子比较明了

A = [4, 3, 2, 6]F(0) = (0 * 4) + (1 * 3) + (2 * 2) + (3 * 6) = 0 + 3 + 4 + 18 = 25F(1) = (0 * 6) + (1 * 4) + (2 * 3) + (3 * 2) = 0 + 4 + 6 + 6 = 16F(2) = (0 * 2) + (1 * 6) + (2 * 4) + (3 * 3) = 0 + 6 + 8 + 9 = 23F(3) = (0 * 3) + (1 * 2) + (2 * 6) + (3 * 4) = 0 + 2 + 12 + 12 = 26So the maximum value of F(0), F(1), F(2), F(3) is F(3) = 26.
大致思路:

【暴力】分别结算每个位置的F[i],分别比较,然后求最大值,大数据测试集合TLE。

【改进】找规律,发现F[i]-F[i+1]=Sum[0~Asize-1]-n*A[i],发现这个规律之后没有及时的运用,有点遗憾。

进一步找到F[i]-F[j]=[j-i]*Sum[0~Asize-1]-n*Sum[i~j-1];

我运用这个公式,避免了每次都计算F[i],在测试过程中,发现判断条件那里容易溢出,改为除法比较之后才通过,代码如下:

CODE:

后面运用第一个公式,重做了一遍,代码简洁了很多。代码如下:


0 0