题目链接:396. 旋转函数
记数组 $n$ 的元素之和为 $S$。根据公式,可以得到:
- $F(0) = 0 \times n_0 + 1 \times n_1 + \dots + (n - 1) \times n_{n-1}$;
- $F(1) = 1 \times n_0 + 2 \times n_1 + \dots + 0 \times n_{n-1} = F(0) + S - n \times n_{n-1}$.
因此,可以不停迭代计算下一个 $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