这个数学题。。。害怕,因为数学题往往没有啥规律可循。。。这题类似一个卷积,因为原始数据分布并没有啥规律,因此必须算出全部的可能结果才可以,否则容易搜索到一个局部极大值而非全局极大值。
主要利用数学公式推导出F(i)与F(i+1)之间的关系,最后AC的代码为:
class Solution {
public:
int maxRotateFunction(vector<int>& A) {
int sum=0;
int F0=0;
int F1=0;
int maxF=0;
for(int i=0;i<A.size();i++)
{
sum+=A[i];
F0+=i*A[i];
}
maxF=F0;
//int F1=F0+sum-A.size()*A[n-1];
//int F2=F1+sum-A.size()*A[n-2];
for(int i=A.size()-1;i>=0;i--)
{
F1=F0+sum-A.size()*A[i];
F0=F1;
maxF=max(maxF,F0);
}
return maxF;
}
};