每日一题力扣396

给定一个长度为 n 的整数数组 A 。

假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的“旋转函数” F 为:

F(k) = 0 * Bk[0] + 1 * Bk[1] + ... + (n-1) * Bk[n-1]。

计算F(0), F(1), ..., F(n-1)中的最大值。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rotate-function
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方案一:

找规律找出来的,

class Solution:
    def maxRotateFunction(self, A: List[int]) -> int:
        l=len(A)
        if l==0:
            return 0
        else:
            return max([sum([j*A[j-i] for j in range(l)]) for i in range(l)])

方案二:

大佬的错位相减法

class Solution:
    def maxRotateFunction(self, A: List[int]) -> int:
        n = len(A)
        cur = sum(A[i] * i for i in range(n))
        _sum = sum(A)
        res = cur
        for i in range(1, n):
            cur = _sum - n * A[-i] + cur
            res = max(res, cur)
        return res

作者:powcai
链接:https://leetcode-cn.com/problems/rotate-function/solution/cuo-wei-xiang-jian-by-powcai/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
原文地址:https://www.cnblogs.com/liuxiangyan/p/14470125.html