问题描述 链接到标题
解题思路 链接到标题
关键在于找到数学规律
代码 链接到标题
class Solution {
public:
int maxRotateFunction(vector<int>& nums) {
vector<int> tmp(2 * nums.size(), 0);
vector<int> res(nums.size(), 0);
int sum = 0;
for (int i = 0; i < nums.size(); i++) {
tmp[i] = nums[i];
tmp[i + nums.size()] = nums[i];
res[0] += i * nums[i];
sum += nums[i];
}
int max_Fk = res[0];
for (int i = 1; i < nums.size(); i++) {
res[i] = res[i - 1] + sum - (nums.size()) * tmp[2 * nums.size() - i];
if (res[i] > max_Fk)
max_Fk = res[i];
}
return max_Fk;
}
};