396. 旋转函数

exiaohu 于 2022-04-22 发布

题目链接:396. 旋转函数

记数组 $n$ 的元素之和为 $S$。根据公式,可以得到:

因此,可以不停迭代计算下一个 $F(1)$,并求出最大值。

from typing import List


class Solution:
    def maxRotateFunction(self, nums: List[int]) -> int:
        ans = sum(nums)

        f0 = sum(i * n for i, n in enumerate(nums))
        ret = f0
        for i in range(1, len(nums)):
            f1 = f0 - ans + len(nums) * nums[i - 1]
            ret, f0 = max(ret, f1), f1

        return ret