问题描述 链接到标题

396.旋转函数

解题思路 链接到标题

关键在于找到数学规律

代码 链接到标题

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;
    }
};