给定一个长度为 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) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。